CKSubscription
醫生說:當記錄修改會導致訂閱火,服務器發送推送通知到所有設備與訂閱除外做出原型改變到一記錄。觀察CKRecord刪除不起作用
假設我有兩個設備:device 1
和device 2
從不同的iCloud帳戶登錄。假設兩個設備都訂閱了某個記錄類型的記錄刪除。
- 如果
device 1
創建一個記錄,然後device 1
刪除它,然後device 2
得到通知 - 這是根據DOC,但.. - 如果
device 1
創建一個記錄,然後device 2
刪除它,然後device 2
得到通知 - 我不要以爲這是根據DOC,和它沒有任何意義,device 2
刪除它,以便device 1
應通知
設置預訂ON設備1和設備2
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: .Alert, categories: nil))
application.registerForRemoteNotifications()
let defaultContainer = CKContainer.defaultContainer()
let publicDatabase = defaultContainer.publicCloudDatabase
publicDatabase.fetchAllSubscriptionsWithCompletionHandler({subscriptions, error in
if error == nil {
if subscriptions.count == 0 {
let subscription = CKSubscription(recordType: "OU", predicate: NSPredicate(value: true), options: .FiresOnRecordDeletion)
subscription.notificationInfo = CKNotificationInfo()
subscription.notificationInfo.shouldBadge = false
subscription.notificationInfo.alertBody = "OU removed or upated"
publicDatabase.saveSubscription(subscription, completionHandler: {subscription, error in
if error == nil {
} else {
println("\(error.localizedDescription)")
}
})
}
} else {
println("\(error.localizedDescription)")
}
})
return true
}
創建記錄在設備1上
@IBAction func addOU(sender: AnyObject) {
var defaultContainer = CKContainer.defaultContainer()
var publicDatabase = defaultContainer.publicCloudDatabase
let r = CKRecord(recordType: "OU", recordID: CKRecordID(recordName: "aaaa"))
publicDatabase.saveRecord(r, completionHandler: { r2, error in
if error == nil {
} else {
println("\(error.localizedDescription)")
}
})
}
刪除記錄在設備2
@IBAction func removeOU(sender: AnyObject) {
var defaultContainer = CKContainer.defaultContainer()
var publicDatabase = defaultContainer.publicCloudDatabase
publicDatabase.deleteRecordWithID(CKRecordID(recordName: "aaaa"), completionHandler: {recordID, error in
if error == nil {
} else {
println("\(error.localizedDescription)")
}
})
}
我radared錯誤rdar:// 18810914 – 2014-10-29 15:46:43