我正在尝试为CloudKit通知创建订阅,但我似乎无法使谓词正确。只显示一个比较谓词的简单通知,因此正确配置了有效负载,但如果我使谓词稍微复杂一点,它就不会收到任何通知。我需要订阅多个记录更改,但我必须逐个进行。我想要的是能够使用IN或OR只有一个订阅但它似乎不起作用。
工作谓词
let predicate = NSPredicate(format: "recordID == %@", recordID1)
非工作谓词
let recordIDs = [recordID1, recordID2, recordID3, recordID4]
let predicate1 = NSPredicate(format: "recordID IN %@", recordIDs)
let predicate2 = NSPredicate(format: "NOT recordID IN %@", recordIDs)
var predicate3 = NSPredicate(format: "recordID != %@", recordID1)
for id in recordIDs.filter {$0 != recordID1} {
predicate3 = NSCompoundPredicate(andPredicateWith: [predicate, NSPredicate(format: "recordID != %@", id)])
}
我正在使用CKQuery CloudKit指南(https://developer.apple.com/reference/cloudkit/ckquery)。订阅谓词实现是不同的还是我只是创建错误的谓词?顺便说一句,所有谓词编译,在他们正确显示的断点上,代码中没有错误,应用程序不会在任何时候崩溃,我已经验证订阅实际上是在服务器上和谓词我已经说明了。无论是在设备上还是在服务器上更改记录都没关系,更复杂的谓词似乎永远不会匹配任何记录。
为了完成,以下是其余的订阅代码,它们使用第一个谓词而不是其他谓词完美地运行,
let subscription = CKSubscription(recordType: "Avatar", predicate: predicate, options: CKSubscriptionOptions.FiresOnRecordUpdate)
let notificationInfo = CKNotificationInfo()
notificationInfo.shouldSendContentAvailable = true
subscription.notificationInfo = notificationInfo
非常感谢任何帮助。