NSMutableDictionary, содержащий NSMutableArray, возвращает строку - PullRequest
0 голосов
/ 03 февраля 2011

Я пытаюсь сохранить множество строк и NSMutableArray в NSMutableDictionary.В основном элемент XML с различными ключом / значениями и одним подэлементом со списком.

        NSMutableArray *subItem = [[[NSMutableArray alloc] init] autorelease];
        for (GDataXMLElement *subElement in [key children]){
            [subItem addObject:[[[self runThroughElement:subElement] copy] autorelease]];
        }
        [item setObject:[[subItem copy] autorelease] forKey:[key name]];

Когда я проверяю тип:

NSLog(@"Categories type: %@", [[item objectForKey: @"categories"] classForCoder]);

, я получаю:

Тип категории: NSArray

Но затем в функции, которая обрабатывает данные и сохраняет их в объекте, они внезапно представляются строкой:

    NSLog(@"Categories type: %@", [[obj objectForKey: @"categories"] classForCoder]);

Что приводит кв:

Тип категории: NSString

Я в растерянности, что происходит не так, почему я получаю строку из словаря, а не массив, который я поставилвнутрь?Любая помощь могла бы быть полезна!(вероятно, нужна дополнительная информация, поэтому, пожалуйста, дайте мне знать, что имеет значение)

1 Ответ

1 голос
/ 03 февраля 2011

Вы не должны использовать classForCoder. Вместо этого просто зарегистрируйте [[obj objectForKey: @ "category"] class] . Я также попытался бы записать в лог прямую [obj objectForKey: @ "category"] , чтобы увидеть, выводит ли она строку или массив. Если он выводит строку, то либо obj не является item, либо ваш словарь изменяется в какой-то момент.

Один совет, нет никаких причин делать [[[NSMutableArray alloc] init] autorelease]. Просто вызовите [массив NSMutableArray]. Делает то же самое, но с меньшим количеством кода. То же самое относится ко многим классам, ищите методы удобного класса, чтобы избавить вас от необходимости делать alloc / init / autorelease.

...