NSPredicate zum Testen auf NULL und leere Zeichenfolgen

73

Ich habe eine NSArrayund muss alle Zeichenfolgen herausfiltern, die null sind oder vielmehr '' (leere Zeichenfolge) haben. Wie mache ich das? Ich habe versucht:

NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"(name!=nil)"]; 

aber das scheint nicht zu funktionieren. Oder vielleicht doch, aber es gibt verschiedene Arten von Null ...

Doz
quelle

Antworten:

150

Wenn Sie keine Kerndaten verwenden, können Sie Folgendes tun:

NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"name.length > 0"];

Wenn die Zeichenfolge leer ist, schlägt dies fehl (weil 0 == 0). In ähnlicher Weise namewird niles auch fehlschlagen, weil [nil length] == 0.

Dave DeLong
quelle
Also, was ist der Lösungspartner? Dieser scheint tatsächlich für mich zu funktionieren, wo die erste Antwort dies nicht tut. Wenn die Zeichenfolge leer ist, ist die Länge nicht = 0? es ist nicht null
Doz
84
!!! Beachten Sie, dass die CoreData- Länge nicht unterstützt wird und schlimmer noch, wenn Sie im Stillen seltsame Ergebnisse zurückgeben. CoreData übersetzt das Prädikat name.length > 1in SQLite in name > 1... Während es sein solltelength(name) > 1
Vincent Guerci
31
Wurde heute noch einmal von diesem mit CoreData ausgetrickst ... verdammt. Ein bisschen lustig, dass ich meinen eigenen vorherigen Kommentar gefunden habe, der danach sucht :)
Vincent Guerci
7
@ VincentG - was ist dann die Lösung für CoreData?
RyanJM
2
Das ist sehr gefährlich. @ VincentG ist richtig. Ich habe eine Zeichenfolge mit einem führenden '/' Zeichen, mit der nicht funktioniert hat .length. Ich musste das name!=nil AND name!=''like @ josema.vitaminew verwenden, das gepostet wurde
Stefan Arn
80

Ich denke das sollte funktionieren:

NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"name!=nil AND name!=''"]; 
José Manuel Sánchez
quelle
3
Dies funktioniert auch für Realm-Datenbankprädikate. Vielen Dank.
Nab
12
 NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"name!=NULL"];
chroww
quelle
7

Dieses Prädikat hat bei mir funktioniert:

[NSPredicate predicateWithFormat:@"(%K== nil) OR %K.length == 0", @"imageUrl", @"imageUrl"]
Josip B.
quelle