iCloud Key-Value-Store-Synchronisationsprobleme (NSUbiquitousKeyValueStoreDidChangeExternallyNotification nicht aufgerufen)
Ich schreibe ein kleines universelles Spiel für iOS. Der Highscore wird geräteübergreifend über einen iCloud-Schlüssel- / Wertspeicher synchronisiert.
as neueste Ergebnis erhalten:
func retrieveHighestScore() -> Int64 {
let iCloudScore: Int64 = NSUbiquitousKeyValueStore.defaultStore().longLongForKey(KeyValueKeyClassification.KeyHighscore.toRaw())
let localScore: Int64 = Int64(NSUserDefaults.standardUserDefaults().integerForKey(KeyValueKeyClassification.KeyHighscore.toRaw()))
var result: Int64 = 0
if localScore > iCloudScore {
storeNewHighscore(localScore)
result = localScore
} else {
storeNewHighscore(iCloudScore)
result = iCloudScore
}
return result
}
Speichern eines neuen Highscores
func storeNewHighscore(newScore: Int64) {
NSUbiquitousKeyValueStore.defaultStore().setLongLong(newScore, forKey: KeyValueKeyClassification.KeyHighscore.toRaw())
NSUserDefaults.standardUserDefaults().setInteger(Int(newScore), forKey: KeyValueKeyClassification.KeyHighscore.toRaw())
if NSUbiquitousKeyValueStore.defaultStore().synchronize() {
println("Synched Successfully")
}
}
Aus irgendeinem Grund werden die Ergebnisse jedoch nicht synchronisiert.
keine Fehlekeine Abstürzekeine NullwerteIch erhalte immer die höchste Punktzahl vom aktuellen Gerät, niemals die, die bei anderen Geräten erzielt wurde.
Kann der Grund in itunesconnect liegen oder stimmt etwas mit meinem Code nicht? Ich benutze ein iPad und ein iPhone zum Testen. Beide sind in meinem eigenen icloud-Konto angemeldet.
Ich melde mich für die Änderungen wie folgt an:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
NSNotificationCenter.defaultCenter().addObserver(self, selector: "icloudKeyValueChanged", name: NSUbiquitousKeyValueStoreDidChangeExternallyNotification, object: nil)
if NSUbiquitousKeyValueStore.defaultStore().synchronize() {
println("initial Synched Successfully")
}
return true
}
Aber die Funktion 'icloudKeyValueChanged' wird niemals aufgerufen.
iCloud-Funktionen sind anscheinend alle in Ordnung: