ユーザーへの CKReference を持つフィールドを含むレコードの CKSubscription をセットアップしようとしています。ただし、レコードが作成されるたびに、compoundPredicate のこの部分が無視され、通知は送信されません。CKSubscription の述語で CKReference を使用することについて何か違いはありますか? ダッシュボードに移動して、(シミュレーターで別のユーザーを実行しているときに) 自分のユーザー recordID の下に新しいレコードを入力します。これは、レコードがデバイスからのものである場合、通知を受信しないことを読んだためです。私はこれに1週間立ち往生しており、これに固有のものをオンラインで見つけることができないため、洞察をいただければ幸いです。真の型の述語の通知を受け取ることができるので、基本的な設定は問題ないと思います。
ダッシュボードには、両方のテスト ユーザーに対して 1 つの汎用サブスクリプションが表示されますが、どちらのユーザーにも特定のレコード ID は表示されません (これは問題ですか?)。
Notifications.read (equals string)
Notifications.user (equals reference)
fetchAllSubscriptionsWithCompletionHandler メソッドを実行すると、このデバイスの現在のユーザー固有の recordID がデバッガーの 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