我成功地在私有数据库中创建了一个自定义区域,然后尝试为该自定义区域创建一个订阅,但是创建订阅失败,并显示错误:“一个错误,指示某些项目失败,但操作总体上成功了。”
ios文档建议使用CKRecordZoneSubscription创建区域订阅。但我仍然会遇到错误。我该如何解决这个问题呢?
var ContactZonePrivateDb: CKRecordZone = CKRecordZone(zoneName: Cloud.PrivateZone.Contact.ZoneName)
func createCustomContactInfoZone (completion: @escaping (Error?) -> Void){
let status = UserDefaults.standard.bool(forKey: Cloud.PrivateDB.CustomZoneCreated)
if status == true {
return
}
let createZoneGroup = DispatchGroup()
createZoneGroup.enter()
let createZoneOperation = CKModifyRecordZonesOperation(recordZonesToSave: [ContactZonePrivateDb], recordZoneIDsToDelete: [] )
createZoneOperation.modifyRecordZonesCompletionBlock = { (saved, deleted, error) in
if error != nil {
if let ckerror = error as? CKError {
self.aErrorHandler.handleCkError(ckerror: ckerror)
}
completion(error)
}
UserDefaults.standard.set(true, forKey: Cloud.PrivateDB.CustomZoneCreated)
self.subscribePrivateZoneContact()
completion(nil)
}
createZoneGroup.leave()
createZoneOperation.qualityOfService = .userInitiated
self.privateDB?.add(createZoneOperation)
}
func subscribePrivateZoneContact() {
let status = UserDefaults.standard.bool(forKey: Cloud.PrivateZone.Contact.SubscriptionID)
if (status == true) {
return
}
let subscriptionZone = CKRecordZoneSubscription(zoneID: ContactZonePrivateDb.zoneID)
let operation = CKModifySubscriptionsOperation(subscriptionsToSave: [subscriptionZone], subscriptionIDsToDelete: nil)
operation.modifySubscriptionsCompletionBlock = { saved, deleted, error in
guard error == nil else {
if let ckerror = error as? CKError {
self.aErrorHandler.handleCkError(ckerror: ckerror)
}
return
}
UserDefaults.standard.set(true, forKey: Cloud.PrivateZone.Contact.SubscriptionID)
DispatchQueue.main.async {
print("Successfully added Private zone subscription.\(self.ContactZonePrivateDb.zoneID)")
}
}
operation.qualityOfService = .userInitiated
self.privateDB?.add(operation)
}发布于 2019-12-02 03:59:10
发现要在自定义专区上创建订阅,必须先在自定义专区中创建一条记录。但对于其他订阅,情况并非如此。想知道为什么吗?
发布于 2019-11-25 23:16:40
如果在CloudKit面板中删除订阅,然后运行一次订阅创建代码,是否仍会显示错误?
我问这个问题的原因是,我相信如果您尝试使用相同的名称重新创建订阅,您将看到该错误。这样做是可以的,并且可以忽略错误。
https://stackoverflow.com/questions/59013952
复制相似问题