在私有数据库的 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】:设置operation
的zoneID
,因为现在您正在查询默认区域。
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 中查询共享记录不返回任何内容的主要内容,如果未能解决你的问题,请参考以下文章