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 ...

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.


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!=''"]; 

3
Dies funktioniert auch für Realm-Datenbankprädikate. Vielen Dank.
Nab

12
 NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"name!=NULL"];

7

Dieses Prädikat hat bei mir funktioniert:

[NSPredicate predicateWithFormat:@"(%K== nil) OR %K.length == 0", @"imageUrl", @"imageUrl"]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.