遇到CKSubscription错误:"无法创建或修改字段' notif_num_subtitle_loc_args'"

时间:2017-05-02 06:29:34

标签: ios swift cloudkit cksubscription

所以我遇到了一个CloudKit错误,当我搜索它时只会得到一个(1)Google结果。运行CKModifySubscriptionsOperation以创建初始用户的CK订阅时出现错误。错误是 Cannot create or modify field 'notif_num_subtitle_loc_args'

我很确定这曾经有用,所以它可能会出现在iOS 10.3或CloudKit内部的内容中吗?

以下是我用于创建订阅的代码:

    let subscriptionID = "MindscopeDownload"
    let predicate = NSPredicate(format: "TRUEPREDICATE")
    let options: CKSubscriptionOptions = [.firesOnRecordCreation, .firesOnRecordUpdate, .firesOnRecordDeletion]
    let subscription = CKSubscription(recordType: "MindscopeNode", predicate: predicate, subscriptionID: subscriptionID, options: options)
    let info = CKNotificationInfo()
    info.alertLocalizationKey = "Mindscope entry changes"
    info.shouldSendContentAvailable = true
    subscription.notificationInfo = info
    let op = CKModifySubscriptionsOperation(subscriptionsToSave: [subscription], subscriptionIDsToDelete: [])
    op.modifySubscriptionsCompletionBlock = { (foo, bar, error: Error?) -> () in
        if let e = error {
            print("Failed to modify subscription: \(e)

以下是某人遇到同样问题的Google结果:https://forums.developer.apple.com/thread/76893

1 个答案:

答案 0 :(得分:1)

我有完全相同的问题,它出现在4月1日到4月17日之间,而我不在办公室(因此没有进行任何代码更改)。我打开了一个bug,已经关闭了。原始的bug仍然是开放的。所以至少Apple承认这是一个错误。

我只在生产环境中看到这个错误,我找到了两个解决方法:

  1. 创建一个新容器,在dev env中创建订阅类型,部署到生产。在prod的新容器中创建新的subs再次工作。
  2. 不幸的是,这给我留下了一个空容器,我并不急于编写迁移代码来将数据从orig容器移动到新容器。

    1. 在原始容器中,在开发环境中,使用仪表板删除所有订阅类型。在应用程序中重新创建它们,然后将更改推送到生产中。在prod的原始容器中创建潜艇再次工作。
    2. 不幸的是,这消除了所有用户为已删除订阅类型创建的所有现有子服务。对我来说幸运的是,每个用户的订阅列表在我的应用程序中是静态的。我的代码在启动时已经验证/重新创建了丢失的潜艇。但是,如果您的用户动态选择要订阅的内容,那么管理这将是一个痛苦的情况。 (您可以在擦除订阅类型之前获取现有的子级并缓存谓词,但这需要与您的用户协调以确保他们已经及时缓存了他们现有的子级)

      请注意,我还尝试使用具有相同谓词的新订阅ID创建新的subs。这完全失败了,抱怨新的潜艇是现有子类型的重复。如果您可以添加到谓词中的其他子句,则可以创建在部署到prod时有效的新子类型。