有条件的 CKSubscription 不会触发通知
Posted
技术标签:
【中文标题】有条件的 CKSubscription 不会触发通知【英文标题】:Conditional CKSubscription does not trigger notification 【发布时间】:2014-08-03 17:22:12 【问题描述】:我有一个OUP
记录类型,它有一个.DeleteSelf
对OU
记录类型的引用。
如果我只是设置无条件订阅,那有效:
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 删除不起作用