2010-09-14 1 views
0

У меня есть следующий код:Weird NSDictionary аварии

NSDictionary *dict = [[NSDictionary alloc] 
      initWithObjectsAndKeys:myarray1, @"array1", myarray2, @"array2" nil]; 

NSArray *shorts =[[dict allKeys] sortedArrayUsingSelector:@selector(compare:)]; 

for (NSString *dir in shorts) { 
    NSArray *tempArr = [dict objectForKey:dir]; 
    for (NSString *file in tempArr) { 
     NSLog(@"%@", file); 
    } 
} 

Где myarray1 и myarray2 являются NSArrays.

Когда я выполнить код сбои приложений с:

-[NSCFString countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x1d134 

Это, очевидно, tempArr, который не признается в качестве NSArray. Я знаю, что [dicFiles objectForKey:dir] возвращает объект типа id, но в качестве общего типа я не могу получить то, что я делаю неправильно.

ответ

1

Вы не включили код, который инициализирует myarray1 и myarray2, но, по-видимому один или оба из них являются экземплярами NSString, а не NSArray. Вы можете проверить, что после извлечения одного из объектов из массива следующим образом:

if (![tempArr isKindOfClass:[NSArray class]]) 
{ 
    NSLog(@"Unable to process temp array because it's an instance of %@", [tempArr class]); 
} 
else 
{ 
    // for loop code goes here... 
} 
+0

Это сделало трюк .... вы были правы, это была моя ошибка –

+1

Когда вы видите сообщение об ошибке «непризнанный селектор», вам повезло, потому что сообщение говорит вам точно, что пошло не так. В этом случае структура пыталась отправить частный вариант '-count' - сообщение NSArray'а в экземпляр' NSCFString' (частный подкласс 'NSString'). – jlehr

+0

Много thaks для этого уведомления! Его действительно полезно –