0
我正尝试使用CloudKit和CKSubcription在几台Apple TV之间同步数据。问题是我添加,删除或更新记录时从不会调用application:didReceiveRemoteNotification:
。我相信我正确配置订阅,并且我确认他们已添加到CloudKit仪表板。我曾多次尝试重置仪表板中的开发环境,但这并没有帮助。我真的不想创建一个定时器来经常抓取每一个。谢谢你的帮助!tvOS中的CloudKit订阅
此外,我正在使用CloudKit中的私有数据库,而不是公用数据库,如果这很重要。
这里是我的代码:
AppDelegate.swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
CloudKitManager.subscribeToItemUpdates()
application.registerForRemoteNotifications()
...
return true
}
CloudKitManager.swift
class func subscribeToItemUpdates() {
if let uuid = UIDevice.currentDevice().identifierForVendor?.UUIDString {
saveSubscriptionWithIdentifier(uuid + "create", options: CKSubscriptionOptions.FiresOnRecordCreation)
saveSubscriptionWithIdentifier(uuid + "update", options: CKSubscriptionOptions.FiresOnRecordUpdate)
saveSubscriptionWithIdentifier(uuid + "delete", options: CKSubscriptionOptions.FiresOnRecordDeletion)
}
}
class func saveSubscriptionWithIdentifier(identifier: String, options: CKSubscriptionOptions) {
let sub = CKSubscription(recordType: "Message", predicate: NSPredicate(value: true), subscriptionID: identifier, options: options)
sub.notificationInfo = CKNotificationInfo()
let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase
publicDatabase.saveSubscription(sub) { (savedSubscription, error) -> Void in
if error != nil {
print("Error saving CloudKit subscription \(error)")
}
else {
print("Saved subscription to CloudKit", savedSubscription)
}
}
}
我使用'应用:didReceiveRemoteNotification'而不是'应用:didReceiveRemoteNotification:fetchCompletionHandler'。我查看了EVCloudKitDao,看起来您正在删除所有订阅,并在每次启动应用程序时重新订阅。我不这样做,这可能是问题吗?有必要吗?因为我在使用私有数据库而不是CloudKit中的公共数据库,所以它有什么不同吗?谢谢 –