2010-09-14 3 views
0

Je le code suivant:étrange accident 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); 
    } 
} 

Où MyArray1 et MyArray2 sont NSArrays.

Lorsque j'exécute le code l'application se bloque avec:

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

Ceci est apparemment le tempArr, qui n'est pas reconnu comme un NSArray. Je sais que [dicFiles objectForKey:dir] renvoie un objet de type id, mais en tant que type générique, je ne peux pas obtenir ce que je fais mal.

Répondre

1

Vous n'avez pas inclus le code qui initialise myarray1 et myarray2, mais apparemment l'un ou les deux sont des instances de NSString plutôt que NSArray. Vous pouvez vérifier que après avoir récupéré l'un des objets du tableau comme suit:

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

Ce fait le tour .... vous aviez raison, il était mon erreur –

+1

Quand vous voyez un message d'erreur « sélecteur non reconnu », vous avez de la chance, parce que le message vous dit exactement ce qui s'est mal passé. Dans ce cas, le framework essayait d'envoyer une variante privée de '-count' - un message' NSArray' - à une instance de 'NSCFString' (une sous-classe privée de' NSString'). – jlehr

+0

Beaucoup de thaks pour cet avis! C'est vraiment utile –