首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >记录、区域未显示在仪表板中和删除区域问题CloudKit

记录、区域未显示在仪表板中和删除区域问题CloudKit
EN

Stack Overflow用户
提问于 2020-04-13 19:21:35
回答 1查看 188关注 0票数 1

我已经为privateCloudDatabase创建了一个区域。

代码语言:javascript
复制
static var privateCloudDatabase: CKDatabase {
    let container = CKContainer(identifier: "iCloud.<bundle>")
    return container.privateCloudDatabase
}

static func createZone() {
    let fetchZonesOperation = CKFetchRecordZonesOperation.fetchAllRecordZonesOperation()
    fetchZonesOperation.fetchRecordZonesCompletionBlock = {
        (recordZones: [CKRecordZone.ID : CKRecordZone]?, error: Error?) -> Void in

        guard error == nil else {
            return
        }


        for recordID in recordZones.keys {
            if recordID.zoneName == zoneName {
                print("Zone Already Created: \(recordID)")
            } else if recordID.zoneName == "_defaultZone" {
                print("Deafult Zone")
            } else {
                let customZone = CKRecordZone(zoneName: zoneName)

                privateCloudDatabase.save(customZone) { zone, error in
                    if let error = error{
                        print("Zone creation error: \(String(describing: error))")
                    } else {
                        print("Zone created: \(String(describing: zone?.zoneID.zoneName))")
                    }
                }
            }
        }
    }
    fetchZonesOperation.qualityOfService = .utility
    privateCloudDatabase.add(fetchZonesOperation)
}

它工作成功,我得到了一个成功的消息,但创建的Zone不会显示在CloudKit仪表板中。到目前为止,它只显示_default区域。

另一个问题与从Zone中删除所有数据有关。为此,我使用了以下代码

代码语言:javascript
复制
    let fetchZonesOperation = CKFetchRecordZonesOperation.fetchAllRecordZonesOperation()
    fetchZonesOperation.fetchRecordZonesCompletionBlock = {
        (recordZones: [CKRecordZone.ID : CKRecordZone]?, error: Error?) -> Void in

        guard error == nil else {
            return
        }

        guard let recordZones = recordZones else { return }

        let deletionOperation = CKModifyRecordZonesOperation(recordZonesToSave: nil, recordZoneIDsToDelete: recordZones.keys.map { $0 })

        deletionOperation.modifyRecordZonesCompletionBlock = { _, deletedZones, error in
            guard error == nil else {
                let error = error!
                print("Error deleting records.", error)
                return
            }

            print("Records successfully deleted in this zone.")
        }
    }
    fetchZonesOperation.qualityOfService = .userInitiated
    privateCloudDatabase.add(fetchZonesOperation)

在这里,我既没有得到任何成功消息,也没有得到任何错误消息。我尝试从区域中删除所有数据的另一种方法是

代码语言:javascript
复制
    let customZone = CKRecordZone(zoneName: zoneName)
    let predicate = NSPredicate(value: true)
    let query = CKQuery(recordType: recordType, predicate: predicate)
    privateCloudDatabase.perform(query, inZoneWith: customZone.zoneID) { (records, error) in
        if error == nil {
            for record in records! {
                removeRecord(record.recordID.recordName) { record, error in

                }
            }
        }
    }

在这里,我得到了成功的消息,但是当我试图从专区获取数据时,我得到了所有条目,这表明数据没有使用上述任何方法删除。对这些问题有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2020-04-15 07:14:09

每当我在CloudKit中遇到莫名其妙的错误和没有数据更新时,通常都是因为一些愚蠢的事情,比如:

  1. 容器标识符的拼写错误,因此它与CloudKit上的错误数据库交互。
  2. 我在苹果设备上使用的帐户与我在CloudKit仪表板中登录的帐户不同。

您是否检查了CloudKit日志以确认这些操作正在命中您的数据库?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61186769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档