3

我不明白为什么我的 ckquery 不获取用户创建的记录。这是我的代码:

@IBAction func browseMyComplaints(sender: AnyObject) {
    // who am i?
    CKContainer.defaultContainer().fetchUserRecordIDWithCompletionHandler({ userRecordID, error in
        if error == nil {
            println(userRecordID.description)
            let query:CKQuery = CKQuery(recordType: "myComplaint", predicate: NSPredicate(format: "creatorUserRecordID = %@", userRecordID))

            var results : [CKRecord] = [CKRecord]()
            var operation : CKQueryOperation = CKQueryOperation(query: query)

            operation.recordFetchedBlock = { (record:CKRecord!) -> Void in
                results.append(record)
            }

            operation.queryCompletionBlock = {
                (cursor:CKQueryCursor!, error:NSError!) in
                if (error != nil) {
                    NSLog(error.description)
                } else {
                    NSLog("no query error reported")
                    NSLog(String(results.count) + " found")
                    tvComplaintRecords = results
                    self.performSegueWithIdentifier("complaintList", sender: self)
                }
            }
            publicDatabase.addOperation(operation)

        } else {
            println("Can not identify user due to error: \(error.localizedDescription)")
        }

    })

}

我的输出是:

<CKRecordID: 0x7be3f220; _46761404769b094e82053fea39b16bb5:(_defaultZone:__defaultOwner__)>
2014-10-11 12:45:32.597 ReportAMenace[15244:781048] no query error reported
2014-10-11 12:45:32.597 ReportAMenace[15244:781048] 0 found

但是有 11 条记录,包括我在运行上述查询之前创建的 1 条记录。有什么提示吗?

4

2 回答 2

2

我想通了。当然有一个简单的答案,尽管即使这样也不是完全直截了当的。

我必须进入 Cloudkit 仪表板(在线网站)并确保创建者字段等将查询标志设置为是。

然而,即便如此,旧的也没有出现(如果 Cloudkit 进行某种批处理夜间索引,也许它们稍后会出现,不确定)。但它确实适用于从那一刻开始创建的新记录。

于 2014-10-13T00:17:38.543 回答
2

您可以创建一个 CKQuery 来搜索这样的记录 ID:

var query = CKQuery(recordType: recordType, predicate: NSPredicate(format: "%K == %@", "creatorUserRecordID" ,CKReference(recordID: userRecordID, action: CKReferenceAction.None)))
于 2014-10-11T18:26:01.683 回答