我不明白为什么我的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条记录。任何提示?
答案 0 :(得分:2)
您可以创建一个CKQuery来搜索这样的记录ID:
var query = CKQuery(recordType: recordType, predicate: NSPredicate(format: "%K == %@", "creatorUserRecordID" ,CKReference(recordID: userRecordID, action: CKReferenceAction.None)))
答案 1 :(得分:2)
我明白了。当然有一个简单的答案,尽管那时它并不完全是直接的。
我必须进入Cloudkit Dashboard(在线网站)并确保创建者字段等将查询标志设置为是。
然而,即便如此,旧版本也没有显示出来(如果Cloudkit在某种情况下进行某种批量的隔夜索引,可能会更晚)。但是IT DID对于从那一刻开始创建的 新 记录起作用。