ich eine Reihe von Instanzen einer Klasse Contact
haben zu suchen genannt, die unter anderem hat die folgenden Eigenschaften:NSPredicate Verwendung durch Array von Objekten
NSArray *mailAddressList // Array of NSString
NSArray *websiteList // Array of NSString
NSArray *tags // Array of instances of Tag class
Die Klasse-Tag die folgenden Eigenschaften hat:
NSString *name;
UIColor *color;
Ich möchte mit NSPredicate eine Zeichenfolge in einer beliebigen Eigenschaft von jedem Contact
suchen. Dies ist der Code, den ich habe:
if([scope isEqualToString:SCOPE_MAIL] || [scope isEqualToString:SCOPE_WEBSITE])
{
// Search through an array
predicate = [NSPredicate predicateWithFormat:@"ANY SELF.%@ contains[c] %@", scope, textSearch];
}
else if([scope isEqualToString:SCOPE_TAG])
{
// Search another object's property
predicate = [NSPredicate predicateWithFormat:@"SELF.%@.name contains[c] %@", scope, textSearch];
}
else
{
// The rest of the properties are instances of NSString
predicate = [NSPredicate predicateWithFormat:@"SELF.%@ contains[c] %@", scope, textSearch];
}
Alles funktioniert gut, außer für SCOPE_TAG
, ist es keine Werte zurückgeben. Ich glaube nicht, dass ich das Prädikat richtig verwende.
HINWEIS: ich mit NSPredicate neu bin, damit ich einige Einblicke zu hören, wie wenn das, was ich tue, ist nicht ok
nicht zu 100% sicher, ob dies ist, was verantwortlich für Ihr Problem, aber Sie sollten den '% K' Format-Bezeichner für Schlüsselpfade anstelle von% @' verwenden. So wäre zum Beispiel die Formatzeichenfolge für 'SCOPE_TAG'' SELF.% K.name enthält [c]% @ "'. – indragie
Danke für den Kommentar. Ich habe ihn in '% K' geändert, aber das Verhalten hat sich nicht geändert –
Vermissen Sie nicht die "ANY" in Ihrer zweiten Prädikat Aussage? Ich denke, Sie wollen überprüfen, ob einer der Tag-Namen in Ihrem Array den Text enthält ... – Alexander