пустой массив в objectForKey завершает работу приложения iPhone - PullRequest
0 голосов
/ 18 апреля 2011

У меня есть массив, который создается из JSON.Массив выглядит так:

[
    {
        "img": "images/photo_10.jpg", 
        "title": "None", 
        "photo_comments": [
            {
                "body": "my comment", 
                "author": "john", 
                "created": "2011-04-17 14:21:11"
            }
        ], 
        "id": 24
    }, 
    {
        "img": "images/photo_8.jpg", 
        "title": "None", 
        "photo_comments": [], 
        "id": 22
    }


]

Я передаю массив в функцию, которая перечисляет через словарь и создает строку, а затем добавляет ее в массив комментариев.Мой код выглядит следующим образом:

    -(NSArray *)formatCommentArray:(NSArray *)array  
{

    NSMutableArray *comments = [[[NSMutableArray alloc] init] autorelease];

    for (NSDictionary *photo in array)
    {   


           for( NSDictionary *comment in [photo objectForKey:@"photo_comments"])
           {

               NSString *commentString = [NSString stringWithFormat:@"%@: %@", 
                                           [comment objectForKey:@"author"], [comment objectForKey:@"body"]];



               [comments addObject:commentString];


           }




    return comments;

}

Приложение перестает работать, потому что не на всех моих фотографиях есть комментарии, и когда оно попадает в пустой массив, оно останавливается.Я попробовал некоторые «если заявления» и несколько других уловок безрезультатно.Я успешно использовал этот код для создания массива изображений, но, очевидно, значение ключа img НЕ было массивом со словарем.Любая помощь будет принята с благодарностью.Заранее спасибо.

1 Ответ

1 голос
/ 18 апреля 2011

хорошо, [[comment objectForKey:@"photo_comments"] objectForKey:@"author"] пытается использовать objectForKey для массива, который не будет работать.Если посмотреть на ваш json, photo_comments - это (потенциально пустой) список, содержащий объекты.Вам нужен еще один цикл списка.

for (NSDictionary *photo in array)
{
  // do stuff with photo.img, photo.title etc

  for (NSDictionary *comment in [photo objectForKey:@"photo_comments"])
  {
    // do stuff with comment.author, comment.body etc
  }
}

(добавьте проверку ошибок в соответствии.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...