无法根据 Cloudkit 中的用户 ID 进行查询
Posted
技术标签:
【中文标题】无法根据 Cloudkit 中的用户 ID 进行查询【英文标题】:Can't query based on User ID in Cloudkit 【发布时间】:2014-10-11 17:27:30 【问题描述】:我不明白为什么我的 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 条记录。有什么提示吗?
【问题讨论】:
【参考方案1】:您可以创建一个 CKQuery 来搜索这样的记录 ID:
var query = CKQuery(recordType: recordType, predicate: NSPredicate(format: "%K == %@", "creatorUserRecordID" ,CKReference(recordID: userRecordID, action: CKReferenceAction.None)))
【讨论】:
我知道你是对的,但它就是行不通。我不明白。我的其他查询工作正常。 println(userRecordID.description) var query = CKQuery(recordType: "myComplaint", predicate: NSPredicate(format: "%K == %@", "creatorUserRecordID" ,CKReference(recordID: userRecordID, action: CKReferenceAction.None))) 【参考方案2】:我想通了。当然有一个简单的答案,尽管即使这样也不是完全直截了当的。
我必须进入 Cloudkit Dashboard(在线网站)并确保创建者字段等的查询标志设置为是。
但是,即使那样,旧的也没有出现(如果 Cloudkit 进行某种类型的批处理夜间索引,也许稍后它们会出现,不确定)。但它确实适用于从那一刻起创建的新条记录。
【讨论】:
啊,我之前也有类似的问题。我希望苹果默认使所有元数据字段可搜索和可排序。或者向 CloudKit 添加功能,通过代码实现。 我同意。旧记录从未出现过。如果您已经有一个大型数据集并且需要打开标志以进行额外的开发,这将是非常糟糕的。以上是关于无法根据 Cloudkit 中的用户 ID 进行查询的主要内容,如果未能解决你的问题,请参考以下文章
iCloud、CloudKit、iOS 8、Apple id