【问题标题】:Querying shared records in a ckzone in the private database returns nothing在私有数据库的 ckzone 中查询共享记录不返回任何内容
【发布时间】: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 是一个全局静态变量,我也用它来保存所述记录,所以它不会是错误的/不同的。

【问题讨论】:

    标签: ios swift cloudkit ckqueryoperation ckrecordzone


    【解决方案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 指出的那样,我找到了我的记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      相关资源
      最近更新 更多