【问题标题】:NSMutable dictionary is nil NSJSONSeralizationNSMutabledictionary 为 nil NSJSONSerialization
【发布时间】:2014-04-10 09:49:59
【问题描述】:

我有这个代码:

NSMutableDictionary *responseObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error: &error];

当互联网连接断开时(我使用的是飞行模式)。

我收到一条错误消息,提示 responseObject 为 nil。

我已经把这段代码直接放在它后面:

if (responseObject == nil){
    dispatch_async(dispatch_get_main_queue(), ^{
        [self ProvidePopUpForNetworkLoss];
    });
}

我收到错误:

**由于未捕获的异常“NSInvalidArgumentException”原因“数据参数为零”而终止此应用程序 谁能帮忙?

【问题讨论】:

  • 你能显示导致错误的行吗?
  • 我的消息的第一行以紫色点亮,表示响应对象为 nil 作为错误。
  • 请提供更多代码
  • 您能说明data 的来源吗?问题可能在您显示的代码之前。
  • 你确定不是nil的数据吗?

标签: ios objective-c nsjsonserialization


【解决方案1】:

试试这个。也许这会对你有所帮助。并检查您从数据中获得的对象是否是字典。

if(!data)
{
    dispatch_async(dispatch_get_main_queue(), ^{
        [self ProvidePopUpForNetworkLoss];
    });
}

【讨论】:

    【解决方案2】:

    当您没有互联网连接(或由于许多其他原因)时,“数据”(无论您从哪里获得)将为零。 JSONObjectWithData 正确地表示使用 nil 数据调用此方法并引发此异常是编程错误。解决方案:如果数据不为零,请不要调用 JSONObjectWithData。无论如何,这个错误应该与返回 nil 的 JSONObjectWithData 区别对待。如果 JSONObjectWithData 返回 nil,则表示您收到的数据有问题。

    要找出问题所在,请在 Xcode 中创建异常断点。它会在抛出异常时停止,这会告诉你哪个方法抛出了异常——它在你的 nil 检查之前。

    【讨论】:

      【解决方案3】:

      ||试试这个修改:

      if (responseObject == [NSNull null] || responseObject == NULL){
      dispatch_async(dispatch_get_main_queue(), ^{
          [self ProvidePopUpForNetworkLoss];
      });
      }
      

      【讨论】:

      • 这些都不起作用,我得到***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因是“数据参数为零”
      • 你检查过你的 API url。
      • 它工作正常,直到我删除互联网连接。所以在我把手机调到飞行模式之前,它是一种享受。
      • 答案是相当没用的,因为 JSONObjectWithData 永远不会返回 [NSNull null] (除非你给它一个允许解析 JSON 片段的参数并且你给它一个片段说“null”),如果将 [NSNull null] 传递给方法,则不会出现“parameter is nil”异常。
      【解决方案4】:

      如果没有网络连接,则响应数据为零,尝试在日志中打印响应字符串或错误,以便您有一个清晰的想法

      NSString *htmlSTR = [[NSString alloc] initWithData:responseData
                                                        encoding:NSUTF8StringEncoding];
      
       NSLog(@"htmlSTR=%@",htmlSTR);
      

      NSLog(@"Error=%@",[error localizedDescription]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多