【问题标题】:Save value of SCNVector3 with UserDefaults in Swift在 Swift 中使用 UserDefaults 保存 SCNVector3 的值
【发布时间】:2018-07-23 20:27:59
【问题描述】:

我正在尝试保存和加载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 个浮点数的情况下保存矢量吗?

【问题讨论】:

    标签: swift crash arkit userdefaults scnvector3


    【解决方案1】:

    您不能将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")
    

    【讨论】:

      猜你喜欢
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 2021-06-08
      • 2023-03-07
      • 1970-01-01
      相关资源
      最近更新 更多