CloudKit 订阅不能在代码中创建吗?
Posted
技术标签:
【中文标题】CloudKit 订阅不能在代码中创建吗?【英文标题】:Can CloudKit subscriptions not be created in code? 【发布时间】:2015-07-26 01:15:29 【问题描述】:我需要在应用运行时创建“动态”订阅,这些订阅无法预先确定,因为它们是基于我为每个连接的设备临时生成的一些唯一 ID。在开发模式下运行时,CloudKit 可以完美运行,但在分发模式下我不断收到此错误:
<CKError 0x1358436e0: "Invalid Arguments" (12/2006); server message = "attempting to create a subscription in a production container"; uuid = 41F4CA23-9849-40B1-8DB5-0030BBD91251; container ID = "iCloud.com.company.CloudKit">
有没有办法动态创建订阅?我认为只需要使用仪表板创建 RecordTypes。
【问题讨论】:
【参考方案1】:您绝对可以在 CloudKit 容器的生产环境中动态创建订阅。如果您对特定记录类型使用查询订阅,则需要确保该记录类型存在于生产环境中(换句话说,您已将架构迁移到生产环境)。
请记住,生产环境也用于 Beta 测试。
【讨论】:
那么苹果在这个页面上说Subscriptions must be created in the Development environment first and then promoted to Production. Attempting to create a subscription directly in the Production environment will result in an error.
是什么意思:developer.apple.com/documentation/cloudkit/cksubscription?我希望我仍然可以在生产环境中使用CKModifySubscriptionsOperation
,因为用户可以更改我的订阅。
有订阅和“订阅类型”。苹果在developer.apple.com/documentation/cloudkit/…中的意思是:“订阅类型必须先在开发环境中创建,然后再升级到生产环境。尝试直接在生产环境中创建订阅类型会导致错误。”【参考方案2】:
解决方案原来是别的东西。我之前使用的是私有数据库的saveSubscription
方法。这显然一直给我上面提到的错误。我最终使用了CKFetchSubscriptionsOperation
和CKModifySubscriptionsOperation
,现在可以完美运行了。
在我的情况下,我确实在生产中设置了订阅类型,并且其他所有设置都正确。这只是使用上述操作的问题,这似乎已经成功了。
【讨论】:
【参考方案3】:看起来不可能在生产容器中使用 TRUEPREDICATE 进行订阅,这两种方法(saveSubscription 和 CKModifySubscriptionsOperation)都是如此。 只需更改谓词即可成功订阅。
【讨论】:
【参考方案4】:Apple 在这方面的文档令人困惑,但每个 CKQuerySubscription
与 Record Type
和其他未记录元素(如 NSPredicate
)的唯一组合都会产生新的订阅类型 必须首先存在于 Development 环境中,然后再部署在 Production 环境中,然后才能使用相同的组合为用户进行新订阅元素。
【讨论】:
以上是关于CloudKit 订阅不能在代码中创建吗?的主要内容,如果未能解决你的问题,请参考以下文章