【问题标题】:JSON or writing dictionaryJSON 或写字典
【发布时间】:2010-06-25 20:05:47
【问题描述】:

将 JSON 回显转换为字典后出现以下错误,

* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* -[NSMutableArray insertObject:atIndex:]:尝试在 0 处插入 nil 对象” *** 首次抛出时调用堆栈:

这是我的 JSON 反序列化代码,我之前使用过这个模型来做一个简单的 plist。现在我正在发送一个更复杂的回声(带有对象和键)并且它正在崩溃。

    NSURL *url = [NSURL URLWithString:@"http://10.0.1.8/~imac/iphone/jsontest.php"];
    NSString *jsonreturn = [[NSString alloc] initWithContentsOfURL:url];

    NSLog(jsonreturn); // Look at the console and you can see what the results are

    NSData *jsonData = [jsonreturn dataUsingEncoding:NSUTF32BigEndianStringEncoding];
    NSError *error = nil;

    NSDictionary * dict = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&error];

    if (dict)
    {
        rowsArray = [dict objectForKey:@"member"];
        [rowsArray retain];
    }


    NSLog(@"Array: %@",rowsArray);
    NSLog(@"count is: %i", [self.rowsArray count]);


    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *choiceR = [documentsDirectory stringByAppendingPathComponent:@"FollowingArray"];
    NSMutableArray *array = [[NSMutableArray alloc] init];

    [array addObject:rowsArray];
    [array writeToFile:choiceR atomically:YES];
    [array release];

    [jsonreturn release];

这是回声的sn-p:

{
  "member": [{
      "userid": "18",
      "firstname": "Frank",
      "lastname": "Johnson",
      "profile": {
        "school": "7",
        "grade": "12",
        "teacher"
      }
    },
    {
      "userid": "38",
      "firstname": "maggy",
      "lastname": "Johnson",
      "profile": {
        "school": "7",
        "grade": "12",
        "teacher"
      }
    }
  ]
}

我假设我正在崩溃,因为数组是空的。任何想法,如果回声导致崩溃或 JSON 中有一条指令来处理这种键和对象返回。

谢谢, 迈克尔

【问题讨论】:

    标签: iphone json plist nsdictionary


    【解决方案1】:

    您将 NSDictonary 传递给 rowsArray,因为您的 JSON 数据似乎是嵌套在字典中的字典。所以我会假设这会导致 rowsArray 为空并在您尝试将其添加到可变数组时导致崩溃。

    【讨论】:

    • 我以前用过这个,这个语句对嵌套数组不正确吗? rowsArray = [dict objectForKey:@"member"];
    • JSON 数据看起来像嵌套字典。 “成员”第一级和另一级看起来像键值,即:“用户 ID”、“18”等。所以它会是 NSDictionary *rowsDict = [dict objectForKey:@"member"];最简单的方法是通过从您的数据中手动编辑它来摆脱“成员”级别,然后您只使用一个字典。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2018-07-25
    相关资源
    最近更新 更多