首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在专用数据库中创建自定义区域的订阅失败

在专用数据库中创建自定义区域的订阅失败
EN

Stack Overflow用户
提问于 2019-11-24 09:46:05
回答 2查看 88关注 0票数 1

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

ios文档建议使用CKRecordZoneSubscription创建区域订阅。但我仍然会遇到错误。我该如何解决这个问题呢?

代码语言:javascript
复制
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)
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-02 03:59:10

发现要在自定义专区上创建订阅,必须先在自定义专区中创建一条记录。但对于其他订阅,情况并非如此。想知道为什么吗?

票数 1
EN

Stack Overflow用户

发布于 2019-11-25 23:16:40

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

我问这个问题的原因是,我相信如果您尝试使用相同的名称重新创建订阅,您将看到该错误。这样做是可以的,并且可以忽略错误。

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

https://stackoverflow.com/questions/59013952

复制
相关文章

相似问题

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