在私有数据库的 ckzone 中查询共享记录不返回任何内容

Posted

技术标签:

【中文标题】在私有数据库的 ckzone 中查询共享记录不返回任何内容【英文标题】:Querying shared records in a ckzone in the private database returns nothing 【发布时间】:2018-10-02 18:25:07 【问题描述】:

Swift 4.2 ios 11.x

我一定错过了什么,因为这肯定可以工作。我得到了在自定义区域中查询私有数据库的代码。尽管我在那里有记录,但它什么也没返回。我为所有内容添加了索引!我还更改了权限中的角色,以便任何经过身份验证的用户都可以读取记录。

public func cleanUpImages(zone2U:String) 
    var records2Delete:[CKRecord.ID] = []
    let zone2D = CKRecordZone(zoneName: zone2U)

    let predicate = NSPredicate(value: true)
    let query = CKQuery(recordType: remoteRecords.notificationMedia, predicate: predicate)
    let operation = CKQueryOperation(query: query)
    operation.recordFetchedBlock =  record in
        records2Delete.append(record.recordID)
    
    operation.queryCompletionBlock =  cursor, error in
        print(records2Delete.count)
    
    CKContainer.default().privateCloudDatabase.add(operation)

notificationMedia 是一个全局静态变量,我也用它来保存所述记录,所以它不会是错误的/不同的。

【问题讨论】:

【参考方案1】:

设置operationzoneID,因为现在您正在查询默认区域。

let operation = CKQueryOperation(query: query)
operation.zoneID = zone2D.zoneID

【讨论】:

您是在问我是否没有找到记录,还是您的意思是说没有找到记录? 确认您在查询中使用的记录类型和区域 ID 与您在 CloudKit 仪表板中看到的实际匹配。确保您查看的是同一个容器和同一个数据库。 我的意思是我做了更改,但它仍然没有返回任何记录。如果我去 cloudkit 仪表板,我会找到 13 条记录。 查看我之前的评论。只有您才能知道您查询的容器、数据库、区域和记录类型是否与您在仪表板中查看的内容相同。【参考方案2】:

我想我找到了答案。我正在使用一种已弃用的方法来保存我的记录。

let customRecord = CKRecord(recordType: remoteRecords.notificationMedia, zoneID: zone2D.zoneID)

我改成这个了..

let customID = CKRecord.ID(recordName: remoteRecords.notificationMedia, zoneID: zone2D.zoneID)
let customRecord = CKRecord(recordType: remoteRecords.notificationMedia, recordID: customID)

现在我在 cloudKit 数据库上的 sharedDatabase 中找到我的记录,当我使用上面显示的方法时,正如rmaddy 指出的那样,我找到了我的记录。

【讨论】:

以上是关于在私有数据库的 ckzone 中查询共享记录不返回任何内容的主要内容,如果未能解决你的问题,请参考以下文章

Android 数据存储

基于PHP的院内私有云盘系统开发与应用

如何在 CloudKit 中存储对共享记录的引用

CloudKit,NSPredicate 在私有容器中返回计数或确定是不是存在任何记录?

如何根据查询结果返回表中的随机记录?

Vuex概述