Observe CKRecord-Löschung über CKSubscription funktioniert nicht
CKSubscription
doc sagt:Wenn eine Datensatzänderung ein Abonnement auslöst, sendet der Server Push-Benachrichtigungen an alle Geräte mit diesem Abonnementausgenommen derjenige, der die ursprüngliche Änderung vorgenommen hat zum Datensatz.
Nehmen wir an, ich habe zwei Geräte:device 1
unddevice 2
von verschiedenen iCloud-Konten angemeldet. Nehmen wir an, beide Geräte haben für einen bestimmten Datensatztyp das Löschen von Datensätzen abonniert.
device 1
erstellt einen Datensatz und danndevice 1
löscht es danndevice 2
Werde benachrichtigt - DAS ENTSPRICHT DEM DOKUMENT, ABER ..Obdevice 1
erstellt einen Datensatz und danndevice 2
löscht es danndevice 2
Lassen Sie sich benachrichtigen - Ich glaube nicht, dass es dem DOC entspricht, und es macht keinen Sinn,device 2
löschte es sodevice 1
sollte benachrichtigt werdenABONNEMENT FÜR GERÄT 1 UND GERÄT 2 EINRICHTEN
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
}
AUFNAHME ERSTELLEN auf GERÄT 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)")
}
})
}
AUFNAHME AUF GERÄT 2 LÖSCHEN
@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)")
}
})
}