3

FireOnCreation を使用して Cloud Kit レコード タイプにサブスクリプションを追加しています。

appDelegate では、 を使用しdidReceiveRemoteNotificationWithCompletionHandlerて通知を受け取りました。私が抱えている問題は、述語に一致するレコードが作成されたときに、didReceiveRemoteNotificationWithCompletionHandler複数回トリガーされることです。デバイス A では、一貫して 3 回トリガーされ、デバイス B では 6 回トリガーされます。Cloud DashBoard でレコードを作成しようとしても、同じことが行われます。つまり、問題はレコードの作成にあるのではないということです。提案やヒントは非常に役立ちます。

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
}

func subscribeRecordChangesForCurrentUser(userRecordID: CKRecordID) {
    print("subscribeRecordChangesForCurrentUser \(userRecordID.recordName)")
    let userRef = CKReference(recordID: userRecordID, action: CKReferenceAction.None)
    let predicate = NSPredicate(format: "toUsers CONTAINS %@", userRef)
    let subscription = CKSubscription(recordType: "Track", predicate: predicate, options: [.FiresOnRecordCreation])

    let notificationInfo = CKNotificationInfo()
    notificationInfo.alertBody = "Created a new track."
    notificationInfo.shouldSendContentAvailable = true
    notificationInfo.soundName = UILocalNotificationDefaultSoundName

    subscription.notificationInfo = notificationInfo

    let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase

    publicDatabase.saveSubscription(subscription) { (subscription: CKSubscription?, error: NSError?) -> Void in
        guard error == nil else {
            print(error?.localizedDescription)
            return
        }
        print("successfully subscript user")
    }
}
4

1 に答える 1

3

これらのデバイスに複数のサブスクリプションがある場合があります。新しいサブスクリプションを作成するときは、古いサブスクリプションを削除してください。

を見てみましょう

CKDatabase.fetchAllSubscriptionsWithCompletionHandler(_:)

迅速で汚い修正のために、デバイスからアプリを削除して再インストールできると思います.

于 2015-12-21T05:37:42.173 に答える