Я пытаюсь настроить подписку CKS для записей, содержащих поле CKReference для пользователя. Но в любое время, когда запись создается, она игнорирует эту часть составного пакета, и уведомление никогда не приходит. Есть ли что-то другое в использовании CKReference в предикате для CKS-подписки? Я захожу в панель инструментов, чтобы ввести новую запись под своим собственным UserIDID пользователя (при запуске другого пользователя в симуляторе), потому что я считаю, что прочитал, что если запись поступает с устройства, он не получит уведомление. Любое понимание очень ценится, поскольку я застрял на этом в течение недели и не могу найти что-либо в Интернете, специфичное для этого. Я могу получить истинные уведомления о предиката типа, поэтому я думаю, что моя базовая настройка в порядке.Уведомление о подписке CloudKit для CKReference не работает как ожидается
В панели я вижу одну общую подписку для обоих тестовых пользователей, но не какой-либо конкретной RecordId для любого пользователя (это имеет значение?):
Notifications.read (equals string)
Notifications.user (equals reference)
Когда я делаю метод fetchAllSubscriptionsWithCompletionHandler, это показать текущий идентификатор записи текущего пользователя для этого устройства как CKReference в отладчике. Поэтому я не знаю, почему это не сработает.
Вот мой код, где я создаю CKReference первый, а затем использовать его для моего предиката:
var recordIDString = CKRecordID(recordName: "_a86dac8ee05f8c6ab35746bf9663d7b8")
// I normally store this string in the NSUserDefaults.
let userRef = CKReference(recordID: recordIDString, action: .DeleteSelf)
let predicate = NSPredicate(format: "user = %@", userRef)
let predicateTwo = NSPredicate(format: "read = %@", "")
// I want the read field to be empty, which tells me user has not read my internal app notif.
let compoundPred = NSCompoundPredicate(type: .AndPredicateType, subpredicates: [predicate, predicateTwo])
Now I set-up the subscription like this:
let subscription = CKSubscription(recordType: "Notifications",
predicate: compoundPred,
options: .FiresOnRecordCreation)
let notificationInfo = CKNotificationInfo()
notificationInfo.alertBody = "Someone replied to your post"
notificationInfo.shouldBadge = true
subscription.notificationInfo = notificationInfo
publicDB.saveSubscription(subscription,
completionHandler: ({subscription, error in.....etc})
// handling this part
Я думаю, что CloudKit не работает со сложными предикатами. Кажется, я читал об этом где-то, но не могу найти точную ссылку. Но я нашел rdar о проблеме: http://www.openradar.me/18807663 –
Спасибо @flinth. Я не пересматривал это через некоторое время, чтобы подтвердить, но это разочаровывает. –