所以我遇到了这个教程,然后跟着它。我只是用它来存储几个boolenas。
无论如何,我并不完全理解这个脚本如何设置存储到iCloud,因为我没有做任何与iCloud相关的事情,只是简单地允许它在功能下。我也在几个场景中测试了它并且没有任何问题。你能想到这可能成为问题的时间吗?
http://nicemohawk.com/blog/2015/08/storing-key-value-data-in-icloud-with-swift/
如果您愿意查看我的代码以确保我做得对,请做!发生的事情是他们的六个键是" HASpayedFOR1"," HASpayedFOR2"这些角色已被解锁,这些存储了一个bool。它们是两个存储空间。
NSUserDefaults的 和NSUbiquitousKeyValueStore
NSUserDefaults通常存储所有内容和所有游戏值,NSUmbiquitousKeyValueStore在"云"中保存我想要的所有内容。我有两个主要功能,一个从云中恢复,另一个保存到它。这些在适当时调用。请注意,这些功能都不允许它向后移动。因此,例如,恢复代码只会将事物设置为true,而保存代码只会将事物设置为true。
您是否可以看到由于无法预料的网络错误而导致的任何崩溃?
var iCloudKeyStore: NSUbiquitousKeyValueStore? = NSUbiquitousKeyValueStore()
func c_reportCloud()
{
if let iCloudKeyStore2 = iCloudKeyStore
{
for var i = 0; i < 7; i++
{
print("Icloud for " + String(i) + " :")
println(iCloudKeyStore2.boolForKey("HASpayedFOR" + String(i)))
}
}
}
func c_restoreCharecters()
{
iCloudKeyStore?.synchronize()
let defaults = NSUserDefaults.standardUserDefaults()
var current:[Bool] = []
for var i = 0; i < 7; i++
{
current.append(defaults.boolForKey("HASpayedFOR" + String(i)))
}
var cloud:[Bool] = []
if let iCloudKeyStore2 = iCloudKeyStore
{
for var i = 0; i < 7; i++
{
cloud.append(iCloudKeyStore2.boolForKey("HASpayedFOR" + String(i)))
}
}
var meme:[Bool] = []
for var i = 0; i < 7; i++
{
//If we dont have it and the cloud does then get it from the cloud!
if (current[i] == false)
{
if (cloud[i] == true)
{
meme.append(true)
defaults.setBool(true, forKey: "HASpayedFOR" + String(i))
}
else
{
meme.append(false)
}
}
else
{
meme.append(false)
}
}
//Force the opening of them
if let it = spriteKit.scene as? Menu
{
it.open(meme)
}
// iCloudKeyStore?.setString(textField.text, forKey: iCloudTextKey)
/*for var i = 0; i < 7; i++
{
print("Has unlocked charecter: " + String(i))
println(defaults.boolForKey("HASpayedFOR" + String(i)))
}*/
}
func c_savePlayers()
{
iCloudKeyStore?.synchronize()
let defaults = NSUserDefaults.standardUserDefaults()
var current:[Bool] = []
for var i = 0; i < 7; i++
{
current.append(defaults.boolForKey("HASpayedFOR" + String(i)))
}
var cloud:[Bool] = []
if let iCloudKeyStore2 = iCloudKeyStore
{
for var i = 0; i < 7; i++
{
cloud.append(iCloudKeyStore2.boolForKey("HASpayedFOR" + String(i)))
}
}
if let iCloudKeyStore2 = iCloudKeyStore
{
for var i = 0; i < 7; i++
{
//If we have something the cloud doesnt
if (current[i] == true)
{
if (cloud[i] == false)
{
iCloudKeyStore2.setBool(true, forKey: "HASpayedFOR" + String(i))
}
}
}
}
iCloudKeyStore?.synchronize()
}
非常感谢!