2013-12-24 2 views
-1

, пожалуйста, со мной, поскольку я только начинаю разработку ios. Я пытаюсь разработать приложение, которое анализирует данные json. У меня есть следующие JSON:iOS 7 NSJSONSerialization

{ 
    myobject:[ 
    { 
     id:184, 
     title: "test title" 
    }  
    ] 
} 

Я следующий код, который им пытаются получить данные заголовка из этого JSON

NSData *jsonData = [NSData dataWithContentsOfURL:myURL]; 

    NSError *error = nil; 

    NSDictionary *currentObject = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error]; 

    if(error) 
    { 
     NSLog(@"%@",error); 
    } 

    NSDictionary *nar = [currentObject objectForKey:@"myobject"]; 

    NSLog(@"%@",[nar valueForKey:@"title"]); 

    NSString *curTitle = [nar valueForKey:@"title"]; 
    self.myTitle.text = curTitle; 

Когда я вхожу титул, я могу видеть, что название действительно возвращается. Однако, когда я пытаюсь установить myTitle.text я получаю следующую ошибку

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI length]: unrecognized selector sent to instance 0x15631850

любой совет будет полезным

ответ

1

Это крах, потому что Ваш словарь содержит NSArray, не словарь.

NSArray *ar = [currentObject objectForKey:@"myobject"]; 

for(NSDictionary *dict in ar) 
{ 
    NSLog(@"%@", [dict objectForKey:@"title"]; 
) 

} 

NSString *curTitle = [[ar objectAtIndex:0] objectForKey:@"title"]; 
self.myTitle.text = curTitle; 
3

В вашем JSON мое поле объект не словарь, но массив словарей, так [nar valueForKey:@"title"] будет возвращать массив valueForKey для каждого из элементов в этом массиве.

Если вы уверены, что о формате данных можно извлечь значение строки из него следующим образом:

 NSArray *nar = [currentObject objectForKey:@"myobject"]; 
NSString *curTitle = nar[0][@"title"]; 

Но, конечно, лучше, чтобы добавить некоторые проверки данных/обработки в производстве код ошибки.

1

Вы пытаетесь назначить NSArray на номер self.myTitle.text.

NSData *jsonData = [NSData dataWithContentsOfURL:myURL]; 

NSError *error = nil; 
NSDictionary *currentObject = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error]; 
if(error) 
{ 
    NSLog(@"%@",error); 
} 

NSArray *nar = [currentObject objectForKey:@"myobject"]; 
NSString *title = [[nar objectAtIndex:0] objectForKey:@"title"]; 
NSLog(@"%@",title); 
self.myTitle.text = title; 
Смежные вопросы