在私有数据库中为自定义区域创建订阅失败



我在私有数据库中成功创建自定义区域,然后尝试为该自定义区域创建订阅,但订阅创建失败并显示错误:"错误指示某些项目失败,但操作总体成功。

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

发现为了在自定义区域上创建订阅,您必须先在自定义区域中创建记录。但其他订阅的情况并非如此。想知道为什么吗?

如果在 CloudKit 仪表板中删除订阅,然后运行一次订阅创建代码,是否仍会显示错误?

我问的原因是,如果您尝试重新创建同名订阅,我相信您会看到该错误。这样做是可以的,可以忽略错误。

最新更新