2016-05-18 19 views
2

Wolkenjungen Ich habe einen Wolkenjungen Datensatz mit 5 Feldern:Verwendung von OR-Operator auf Prädikat

Active 
User1 
User2 
User3 
User4 

Ich versuche, den Rekord zu holen, wo eine der vier Benutzerfelder mit dem Benutzer-ID Variablen Übereinstimmen.

Nur eine weitere der 4 Benutzerfelder entspricht der Benutzer-ID-Variable.

Dies ist der Code ich verwende:

var userID = "0984093843897" 

predicate = NSPredicate(format: "userID1 = %@ OR userID2 = %@ OR userID3 = %@ OR userID4 = %@ AND active = %@", userID, userID, userID, userID, true) 

Im Grunde, was ich versuche, etwas Ähnliches wie die Aussage unten zu erreichen ist:

if userID1 == userID || userID2 == userID || userID3 == userID || userID4 == userID && active = true 
Wolkenjunge für das Prädikat

Unfortunatelly einen Fehler zurückgibt Format. Ich bin mir nicht sicher, ob das, was ich hier versuche, mit Cloudkit-Prädikaten erreicht werden kann oder ob es einen besseren Weg dafür gibt.

Die meisten Beispiele, die ich hier auf dem Stack gefunden habe, befassen sich mit Prädikaten mit AND-Operatoren, die nicht sicher sind, wie man einen OR-Operator verwendet. Betrachtet man Apple Docs, gibt es das nicht, also bin ich mir nicht sicher, ob es eine Arbeit gibt.

+0

Sie sollten die Fehlermeldung in Ihre Frage aufnehmen. – rmaddy

Antwort

1

Cloud Kit CKQuery unterstützt OR in einem Prädikat nicht. Siehe Dokumentation für CKQuery. Es zeigt alle unterstützten Prädikatoperatoren an, und während und NOT unterstützt werden, ist OR nicht. Ein möglicher Ersatz für OR wäre IN. Ich habe das nur gesehen, wo Sie sehen möchten, ob ein einzelnes Feld einen von mehreren Werten enthält. Aber dein Fall ist umgekehrt. Versuchen Sie Folgendes, aber es funktioniert möglicherweise nicht.

var userID = "0984093843897" 
NSPredicate(format:"%@ IN { %K, %K, %K, %K } AND active = true", userID, "userID1", "userID2", "userID3", "userID4"] 
+0

Ich weiß, dass dies in meinen Tests als korrekt markiert wurde, obwohl das Prädikat erstellt wird, wenn Sie versuchen, es auf die CKQuery anzuwenden, wird ein Fehler gemeldet, der besagt, dass "0984093843897" kein ausgewerteter Objektausdruck ist. Hat also jemand das tatsächlich zur Arbeit gebracht? – PKCLsoft