Apples Class Reference によるとCKQuery
、この演算子CONTAINS
はサポートされている演算子の 1 つです。しかし、それはうまくいかないようです。とRecordType
呼ばれる とmyRecord
、フィールド名がname
typeのレコードがありますString
。1 つは "==" 演算子を使用し、もう 1 つは演算子を使用して、2 つの異なる述語を使用してレコードを取得しようとしましたCONTAINS
。
func getRecords() {
let name = "John"
let Predicate1 = NSPredicate(format: "name == %@",name)
let Predicate2 = NSPredicate(format: "name CONTAINS %@",name)
let sort = NSSortDescriptor(key: "Date", ascending: false)
let query = CKQuery(recordType: "myRecord", predicate: Predicate1)
// let query = CKQuery(recordType: "myRecord", predicate: Predicate2)
query.sortDescriptors = [sort]
let operation = CKQueryOperation(query: query)
operation.desiredKeys = ["name", "Date"]
operation.recordFetchedBlock = { (record) in
print(record["name"])
operation.queryCompletionBlock = { [unowned self] (cursor, error) in
dispatch_async(dispatch_get_main_queue()) {
if error == nil {
print ("sucess")
} else {
print("couldn't fetch record error:\(error?.localizedDescription)")
}
}
}
CKContainer.defaultContainer().publicCloudDatabase.addOperation(operation)
}
を使用するPredicate1
と、出力は次のようになります。
Optional(John)
sucess
を使用するPredicate2
と、出力は次のようになります。
couldn't fetch record error:Optional("Field \'name\' has a value type of STRING and cannot be queried using filter type LIST_CONTAINS")
また[c]
、大文字と小文字を無視するために使用すると、サーバーの問題が発生します。
CONTAINS
演算子を正しく使用するにはどうすればよいですか?
編集:
ドキュメントを詳しく調べたところ、 でCONTAINS
のみ使用できることがわかりましたSELF
。すべての文字列フィールドが検索に使用されることを意味します。より良い方法はありませんか?