Как анализировать и реорганизовывать информацию в NSDictionary - PullRequest
0 голосов
/ 06 мая 2011

Итак, у меня есть массив NSDictionaries, у каждого NSDictionary есть несколько пар ключ / значение, относящихся к аспектам фотографии (из Flickr).

Я создаю приложение, в котором есть UITableViewController, ячейки которого должны быть каждой из разных категорий фотографий.Поэтому в псевдокоде я пытаюсь создать новый NSDictionary (с ключами, являющимися категориями фотографий, значениями являются NSDictionaries фотографий, которые содержат этот ключ).Я перебираю каждый NSDictionary в исходном массиве, получаю теги категорий и говорю, что если мой новый NSDict не содержит этот ключ, создайте новый ключ для пустого массива.Затем добавьте текущий NSDict в этот массив.Я получаю постоянные ошибки, не знаю почему.

Вот разбавленный код.

  photoList = [FlickrFetcher photosWithTags:[NSArray arrayWithObjects: @"CS193p_SPoT", nil]];
    NSLog(@"%@", photoList);
    categories = [[NSDictionary alloc] init]; 
    NSArray *temp = [[NSArray alloc] init];
    for (id obj in photoList) {
        temp = [[obj objectForKey:@"tags"] componentsSeparatedByString:@" "];
        for (id string in temp) {
            if (![categories objectForKey:string]) {
                NSMutableArray *arr = [[NSMutableArray alloc] init];
               [categories setObject:arr forKey:string];
                //[arr release];
            }
            NSMutableArray *photos = [categories objectForKey:string];
            [photos addObject:obj];
            [categories setObject:photos forKey:string];
        }
    }

Спасибо!

Ответы [ 2 ]

4 голосов
/ 06 мая 2011

NSDictionary не имеет метода setObject:forKey:. Вам нужен NSMutableDictionary.

self.categories = [NSMutableDictionary dictionary];

Кроме этого, пожалуйста, используйте превосходную переписывание Joost вашего кода.

SIGABRT, как вы знаете, скорее всего, это означает, что утверждение где-то не удалось. В этом случае это может быть утверждение полностью в CoreFoundation *; CF проверяет изменчивость, когда вы пытаетесь получить доступ к словарю, подобному этому, и вызывает прерывание, если объект не изменчив.


* Недавно я только что узнал о доступности источника CF и просматривал его, так что это может быть просто "новая вещь" и неверно.

1 голос
/ 06 мая 2011

Я не замечаю никаких ошибок (то есть синтаксических ошибок) в вашем коде, однако вот обновленный фрагмент кода, который был реализован немного чище (без утечек памяти)1003 * Если это не работает, сообщите нам точное предупреждение, и где оно было вызвано.

...