可以在代码中创建CloudKit订阅吗?

时间:2015-07-26 01:15:29

标签: ios icloud cloudkit

我有动态的'我需要在应用运行时创建的订阅,这些订阅无法预先确定,因为它们基于我为每个设备连接暂时生成的某个唯一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。

4 个答案:

答案 0 :(得分:4)

您绝对可以在CloudKit容器的生产环境中动态创建订阅。如果您正在使用特定记录类型的查询订阅,则需要确保生产中存在记录类型(换句话说,您已将模式迁移到生产中)。

请记住,生产环境也用于beta测试。

答案 1 :(得分:0)

解决方案原来是另一回事。我以前使用私有数据库的saveSubscription方法。这显然一直给我上面提到的错误。我最终使用了CKFetchSubscriptionsOperationCKModifySubscriptionsOperation,现在效果非常好。

在我的情况下,我确实在Production中设置了订阅类型,并且还正确设置了其他所有内容。这只是使用上述操作的问题,而这似乎已经成功了。

答案 2 :(得分:0)

在生产容器中看起来无法使用TRUEPREDICATE进行订阅,对于这两种方法(saveSubscription和CKModifySubscriptionsOperation)都是如此。 只需更改谓词即可获得成功订阅。

答案 3 :(得分:0)

Apple关于此的文档令人困惑,但是每个CKQuerySubscriptionRecord Type和其他未记录的元素(如NSPredicate的唯一组合)都会产生一个新的 订阅类型 ,该类型必须首先存在于开发环境中,然后从那里部署在生产环境中,然后才能为用户使用相同的元素组合。