2017-08-03 4 views
1

Ich habe NSDictionary, die folgende Art von Objekten enthält.NSDictionary erhalten Objekte nach Eigenschaftswert

OBJECT1 - isFree:NO 
      Name: Papaya 

OBJECT2 - isFree:YES 
      Name: Apple 

OBJECT3 - isFree:YES 
      Name: Grapes 

Ich kann durch objectForKey mit Objekt für den angegebenen key erhalten wie folgt.

NSString* contentId = @"OBJECT3"; 
ACBContentType *object = [[[ACBLibrary sharedLibrary] contentsDictionary] objectForKey:contentId]; 

Allerdings möchte ich alle Objekte erhalten, die isFree:YES von Objekt isFree Eigenschaft zu lesen. Was ist der beste Weg, dies zu tun?

Antwort

4

Wenn Sie in die Tasten nicht interessiert sind, sondern nur die Objekte, ist es ziemlich einfach:

NSDictionary *contentDictionary = …; 
NSPredicate *freePredicate = [NSPredicate predicateWithFormat:@"isFree == %@", @YES]; 
NSArray* freeContent = [[contentDictionary allValues] filteredArrayUsingPredicate:freePredicate]; 

typisierten in Safari.

-allValues gibt ein Array aller Wertobjekte zurück. -filteredArrayUsingPredicate: reduziert dies auf die Elemente, die das Prädikat erfüllen.

+0

Es gibt kein '[contentDictionary allObjects]'. Können wir 'allValues' anstelle von' allObjects' verwenden? – isuru

+0

Entschuldigung, ja, natürlich. –

+0

Ja, das ist wirklich eine optimale Lösung und in meinem Fall 'predicateWithFormat: @" isFree ==% @ ", @" YES "'. – isuru

Verwandte Themen