2010-06-25 4 views
0

Я получаю ошибку followig после преобразования JSON эхо в словарь,Ошибки в формате JSON или запись словарь

* Нагрузочное приложение из-за неперехваченное исключение «NSInvalidArgumentException», причины: «* - [NSMutableArray insertObject: atIndex:]: попытаться вставить нулевой объект в 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 будет пустым и вызовет сбой при попытке добавить его в ваш изменяемый атрибут.

+0

Я использовал это раньше, это утверждение неверно для вложенного массива? rowsArray = [dict objectForKey: @ "member"]; –

+0

Данные JSON выглядят как вложенный словарь. «Участник» первого уровня и другого уровня выглядит как ключевые значения, то есть: «идентификатор пользователя», «18» и т. Д. Таким образом, это будет NSDictionary * rowsDict = [dict objectForKey: @ "member"]; Проще всего было бы избавиться от уровня «члена», вручную отредактировав его из ваших данных, а затем вы работаете только с одним словарем. –

Смежные вопросы