有条件的 CKSubscription 不会触发通知

Posted

技术标签:

【中文标题】有条件的 CKSubscription 不会触发通知【英文标题】:Conditional CKSubscription does not trigger notification 【发布时间】:2014-08-03 17:22:12 【问题描述】:

我有一个OUP 记录类型,它有一个.DeleteSelfOU 记录类型的引用。

如果我只是设置无条件订阅,那有效

let subscriptionOUP = CKSubscription(recordType: "OUP", predicate:NSPredicate(value: true), subscriptionID: "oup", options: .FiresOnRecordUpdate)

但是有条件的方式不是

let ekf = "oup-\(ou.recordID)"
let pr = NSPredicate(format: "ou = %@", CKReference(recordID: CKRecordID(recordName: organizationUser.recordID), action: .DeleteSelf))
let subscriptionOUP = CKSubscription(recordType: "OUP", predicate:pr, subscriptionID: ekf, options: .FiresOnRecordUpdate)
println("\(pr) \(ekf)")

终端内容:

ou == <CKReference: 0x1558d3d0;51D56239-D68C-4E12-BD23-E4DCEF5721B7:(_defaultZone:__defaultOwner__)> 

oup-51D56239-D68C-4E12-BD23-E4DCEF5721B7

我的谓词或订阅 ID 有什么问题?

【问题讨论】:

【参考方案1】:

subscriptionID 字符串太长。

当你像这样减少它时,它会起作用:

let ekf = "oup-\((organizationUser.recordID as NSString).substringToIndex(7))"

【讨论】:

是的,我也发现了这个!它默默地失败,没有给你任何错误。但问题变成了订阅 ID 的长度

以上是关于有条件的 CKSubscription 不会触发通知的主要内容,如果未能解决你的问题,请参考以下文章

对 creatorUserRecordID 的 CKSubscription 永远不会到达

通过 CKSubscription 观察 CKRecord 删除不起作用

如何快速解析 TVos 中返回的 CKSubscription 用户信息字段

如何设置最小的 CKSubscription?

UITableView 不会更新数据

有条件地渲染同一个组件不会触发挂载()钩子。