2014-07-07 5 views
18

Ich brauche Abfrage alle Datensatztypen, ohne Filterung. Ich habe versucht, zwei Möglichkeiten:Wie kann ich eine CKQuery ohne Prädikat erstellen?

let query = CKQuery(recordType: "Pm", predicate: nil) 
let query = CKQuery(recordType: "Pm", predicate: NSPredicate(format: "")) 

Ich habe Fehler:

'NSInvalidArgumentException', reason: 'Unable to parse the format string ""'

wie zu tun?

Antwort

31

Sie können keine Abfrage ohne Prädikat erfüllen, aber NSPredicate tut nur für diese eine Methode haben, und in Swift ist es durch den Initialisierer verwendet:

init(value: Bool) -> NSPredicate // return predicates that always evaluate to true/false 

Verwendung ist wie folgt.

let predicate = NSPredicate(value: true) 
+0

Hi Mick Weißt du, ob es eine andere Möglichkeit gibt, die öffentliche Datenbank als Administrator zu schreiben, um Daten zu säen und zu pflegen, ohne eine iCloud-Anmeldung zu benötigen? vollständige Frage: http://stackoverflow.com/questions/36808601/seed-and-maintain-cloudkit-public-database-still-requires-icloud-login – Crashalot

+0

Große Antwort, danke! –

+0

Entsprechend der CKQuery-API-Referenz: "Prädikate basieren auf einer Formatzeichenfolge. Sie können keine wert- oder blockbasierten Prädikate verwenden." Ich glaube nicht, dass es immer so war, aber momentan funktioniert diese Antwort nicht mehr. –

19

alle Datensätze zu erhalten, müssen Sie dies als Prädikat für Ihre CKQuery verwenden:

[NSPredicate predicateWithFormat:@"TRUEPREDICATE"] 

oder in Swift:

NSPredicate(format: "TRUEPREDICATE") 

Dies funktioniert effektiv wie kein Prädikat mit .

+2

Dies sollte die Accepted – Yariv

+0

@ yar1vn Antwort sein, wenn Sie mir die Frage nichts ausmacht, warum? Gibt es einen Unterschied zwischen dieser Methode und derjenigen in meiner Antwort, die ich nicht sehe? –

+3

Dies ist die Lösung, die Apple in der Dokumentation empfiehlt. Es ist wahrscheinlich nichts falsch mit Ihrer Antwort aber gegeben 2 Lösungen die dokumentierte sollte bevorzugt werden – Yariv

Verwandte Themen