Exemple de

Je n’ai pas trouvé d’exemple de travail de la méthode [NSDictionary getObjects:andKeys:] . Le seul exemple que j’ai pu trouver, ne comstack pas. J’ai fourni les erreurs / avertissements ici au cas où quelqu’un les chercherait.

La raison de ma confusion est que la plupart des méthodes sur NSDictionary renvoient un NSArray . Cependant, dans la documentation, il est indiqué que les variables de sortie de cette méthode sont renvoyées sous forme de tableaux C.

Voici les messages d’erreur / avertissements que vous pourriez recevoir si vous suivez l’exemple lié:

 NSDictionary *myDictionary = ...; id objects[]; // Error: Array size missing in 'objects' id keys[]; // Error: Array size missing in 'keys' [myDictionary getObjects:&objects andKeys:&keys]; for (int i = 0; i < count; i++) { id obj = objects[i]; id key = keys[i]; } 

.

 NSDictionary *myDictionary = ...; NSInteger count = [myDictionary count]; id objects[count]; id keys[count]; [myDictionary getObjects:&objects andKeys:&keys]; // Warning: Passing argument 1 of 'getObjects:andKeys:' from incompatible pointer type. for (int i = 0; i < count; i++) { id obj = objects[i]; id key = keys[i]; } 

Je vais fournir une solution de travail en réponse à cette question.

Voici la bonne façon d’utiliser cette méthode:

 NSDictionary *myDictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"1", @"A", @"2", @"B", nil]; NSInteger count = [myDictionary count]; id objects[count]; id keys[count]; [myDictionary getObjects:objects andKeys:keys]; for (int i = 0; i < count; i++) { id obj = objects[i]; id key = keys[i]; NSLog(@"%@ -> %@", obj, key); } 

Sous ARC, la solution doit être modifiée comme suit (__unsafe_unretained ajouté aux définitions du tableau):

 NSDictionary *myDictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"1", @"A", @"2", @"B", nil]; NSInteger count = [myDictionary count]; id __unsafe_unretained objects[count]; id __unsafe_unretained keys[count]; [myDictionary getObjects:objects andKeys:keys]; for (int i = 0; i < count; i++) { id obj = objects[i]; id key = keys[i]; NSLog(@"%@ -> %@", obj, key); }