我正在为iOS编写一个小型通用游戏.
高分将通过iCloud Key / Value商店在设备上同步.
高分将通过iCloud Key / Value商店在设备上同步.
获得最新分数:
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
}
存储新的高分
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")
}
}
但由于某种原因,分数不同步.
>没有错误
>没有崩溃
>没有空值
我总是得到当前设备的最高分,而不是其他设备.
原因可能在于itunesconnect还是我的代码有问题?我正在使用ipad和iphone进行测试,两者都登录到我自己的icloud帐户.
我正在注册这样的更改:
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
}
但是从不调用函数’icloudkeyvalueChanged’.
iCloud功能一切正常,因为它似乎:
解决方法
我有同样的问题.在我的设备上记录iCloud并重新登录,解决了问题:-)