2014-07-07 20 views
18

Ho bisogno di query tutti i tipi di record, senza alcun filtro. Ho provato due modi:Come posso creare un CKQuery senza predicato?

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

mi sono errore:

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

come fare?

risposta

31

Non è possibile eseguire una query senza un predicato, ma NSPredicate ha un metodo proprio per questo, e Swift è utilizzato attraverso l'inizializzatore:

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

uso è il seguente.

let predicate = NSPredicate(value: true) 
+0

hi mick sai se esiste un altro modo per scrivere il database pubblico come amministratore, per seminare e conservare i dati, senza richiedere un accesso icloud? domanda completa: http://stackoverflow.com/questions/36808601/seed-and-maintain-cloudkit-public-database-still-requires-icloud-login – Crashalot

+0

Ottima risposta, grazie! –

+0

In base al riferimento API CKQuery: "I predicati si basano su una stringa di formato. Non è possibile utilizzare predicati basati su valori o blocchi." Non penso che sia sempre stato così, ma attualmente questa risposta non funziona più. –

19

Per ottenere tutti i record, è necessario utilizzare questo come il predicato per la vostra CKQuery:

[NSPredicate predicateWithFormat:@"TRUEPREDICATE"] 

o, in Swift:

NSPredicate(format: "TRUEPREDICATE") 

Questo funziona in modo efficace come non avere alcun predicato .

+2

Questa dovrebbe essere la risposta accettata – Yariv

+0

@ yar1vn Se non ti dispiace chiederlo, perché? C'è qualche differenza tra questo metodo e quello nella mia risposta che non vedo? –

+3

Questa è la soluzione consigliata da Apple nella documentazione. Probabilmente non c'è niente di sbagliato nella risposta, ma ci sono 2 soluzioni a cui si dovrebbe preferire quella documentata – Yariv

Problemi correlati