Records, Zone doesn't displayed in Dashboard and Delete Zone issue CloudKit

一世执手 提交于 2020-05-09 06:51:05

问题


I have created a zone for privateCloudDatabase.

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)
}

It works successfully and I got a success message but created Zone doesn't display in CloudKit Dashboard. It only shows the _default zone as of now.

The other issue is related to delete all data from Zone. For that, I used below code

    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)

Here I neither get any success message not get any error message. The other method I tried to delete all data from the zone is

    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

                }
            }
        }
    }

Here, I get the success message but when I am trying to fetch data from the zone, I get all entries and that suggests data aren't deleted using any of the above methods. Any suggestions for these queries?


回答1:


Whenever I have run into inexplicable errors and the absence of data updates in CloudKit, it was usually because of something silly like:

  1. A typo in the container identifier so it was interacting with the wrong database on CloudKit.
  2. The account on my Apple device that I was using was different than the account I was signing into in the CloudKit Dashboard.

Have you checked the CloudKit logs to confirm that these actions are hitting your database?



来源:https://stackoverflow.com/questions/61186769/records-zone-doesnt-displayed-in-dashboard-and-delete-zone-issue-cloudkit

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!