2010-06-25 55 views
0

我JSON转换后刚开的followig错误呼应成一本字典,错误JSON或写入字典

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

这是我的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]; 

这里是回声的一个片段:

{"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中的指令来处理这种类型的键和对象返回。

感谢, 迈克尔

回答

0

你传递一个NSDictonary到rowsArray为您的JSON数据似乎是嵌套在字典中的字典。所以我会假设这是造成rowsArray为空,并导致崩溃,当你尝试并将其添加到你的可变arrray。

+0

我以前用过这个,这个语句对嵌套数组不正确吗? rowsArray = [dict objectForKey:@“member”]; – 2010-06-25 23:17:14

+0

JSON数据看起来像嵌套字典。 “成员”的第一级和其他级别看起来像键值,即:“用户ID”,“18”等 所以这将是NSDictionary * rowsDict = [字典objectForKey:@“成员”]; 最简单的事情就是通过手动编辑数据来摆脱“成员”级别,然后您只使用一个字典。 – 2010-06-26 10:23:43