ios - CloudKit 在创建记录时收到多个通知

标签 ios swift cloudkit cksubscription

我正在使用 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")
    }
}

最佳答案

您可能在这些设备上有多个订阅。创建新订阅时,请删除旧订阅。

看看

CKDatabase.fetchAllSubscriptionsWithCompletionHandler(_:)

要快速修复,我相信您可以从设备上删除该应用程序并重新安装。

关于ios - CloudKit 在创建记录时收到多个通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34388279/

相关文章:

ios - 从 reverseGeocodeLocation 仅返回英文地址

ios - 仅对一个单元格进行缩进

objective-c - 对于 Objective-C,实现值对数组的最有效方法是什么?

ios - 保存并重新发送 Alamofire 请求

ios - CKReference 的 CloudKit Delete Self 选项不起作用

ios - Cloudkit: "ZoneId provided doesn' t 匹配目标区域”

swift - 检查 CKAsset 中是否为 nil 时出错

IOS 移除 CCLayer 并替换为 ViewController

ios - 架构 i386 的 8 个重复符号

ios - UIView 出现错误的中心位置