我正在尝试保存和加载 SCNVector3
,这是我用来保存和加载向量的代码:
//Definition of the two vectors
let storedVector = SNCVector3Make(0,0,0)
let vector = SNCVector3Make(1,1,1)
let defaults = UserDefaults.standard
//Saving the vector
defaults.set(vector, forKey: "storedVector")
//Loading the vector into storedVector variable if already saved
let storedVector = defaults.object(forKey: "storedVector") as? SCNVector3 ?? storedVector
我必须检查该值是否已经保存,因为我将值保存在按钮的按钮上并加载时加载。
问题在于,保存向量时,应用程序正在崩溃。
但是,如果我将矢量分为这样的三个浮子:
defaults.set(vector.x, forKey: "storedVectorx")
defaults.set(vector.y, forKey: "storedVectory")
defaults.set(vector.z, forKey: "storedVectorz")
然后以这样的加载:
storedVector.x = defaults.float(forKey: "storedVectorx")
storedVector.y = defaults.float(forKey: "storedVectory")
storedVector.z = defaults.float(forKey: "storedVectorz")
该应用不会崩溃。
我可以在不崩溃的情况下保存向量,而不会将其分为3个浮子?
您无法将SCNVector3
对象直接保存到UserDefaults
。对于较短的解决方案,您可以将向量值保存为数组或字典。
let vectorArray = [vector.x, vector.y, vector.z]
UserDefaults.standard.set(vectorArray, forKey: "storedVector")
let vectorDict = ["x": vector.x, "y": vector.y, "z": vector.z]
UserDefaults.standard.set(vectorDict, forKey: "storedVector")