Problemas de sincronização do iCloud Key-Value-Store (NSUbiquitousKeyValueStoreDidChangeExternallyNotification não chamado)
estou escrevendo um pequeno jogo universal para iOS. o recorde será sincronizado entre dispositivos por meio de um armazenamento de chave / valor do iCloud.
obtendo a pontuação mais recente:
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
}
armazenando um novo recorde
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")
}
}
por alguma razão, no entanto, as pontuações não são sincronizadas.
Sem errossem falhassem valores nuloseu sempre obtenho a pontuação mais alta do dispositivo atual, nunca o alcançado em outros.
poderia o motivo estar no itunesconnect ou há algo errado com o meu código? Estou usando um ipad e um iphone para teste, ambos conectados à minha conta no icloud.
Estou me registrando para as alterações como esta:
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
}
mas a função 'icloudKeyValueChanged' nunca é chamada.
Os recursos do iCloud estão todos ok, como parece: