3

Apples Class Reference によるとCKQuery、この演算子CONTAINSはサポートされている演算子の 1 つです。しかし、それはうまくいかないようです。とRecordType呼ばれる とmyRecord、フィールド名がnametypeのレコードがあります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。すべての文字列フィールドが検索に使用されることを意味します。より良い方法はありませんか?

4

1 に答える 1