Ios UserDefaults数组返回为空

Ios UserDefaults数组返回为空,ios,arrays,swift,nsuserdefaults,Ios,Arrays,Swift,Nsuserdefaults,我正在尝试将对象数组设置为用户默认值,但没有追加 声明数组的变量 在我的AllFormulas课程中: let defaults = UserDefaults.standard static var lineOne1 = UserDefaults.standard.array(forKey: "line1") as? [Formulas] ?? [] init() { //formula names and values 然后我从一个空数组开始 lineOne1 = [] } 附加

我正在尝试将对象数组设置为用户默认值,但没有追加

声明数组的变量 在我的AllFormulas课程中:

let defaults = UserDefaults.standard    
static var lineOne1 = UserDefaults.standard.array(forKey: "line1") as? [Formulas] ?? []
init() {
//formula names and values 
然后我从一个空数组开始

lineOne1 = []
}
附加到数组 在我的AddViewController类中:

 func lineOneAdd() {
    let line1 = lineOne1
    lineOne1.append(formulaAppend)
    defaults.set(line1, forKey: "line1")
    defaults.synchronize()

}
然后调用视图中的userDefaults加载 MainViewController类:

line1[indexPath.row] // as my cellForRowAt in tableView


print(line1)
//which prints : []

知道我做错了什么吗?提前感谢

您似乎添加到了错误的数组:

lineOne1.append(formulaAppend)
应该是:

line1.append(formulaAppend)

同步
的调用已过时。应该删除它。userDefaults是全局的吗?当我调用forKey时:“line1”,我的lineOne1变量在另一个类中声明。那有关系吗?是的,对不起。。我只是想简化一下。我没有具体说明,这是在我更新我的问题,以显示我尝试了。但当我调用该函数“***由于未捕获的异常而终止应用程序'NSInvalidArgumentException',原因:'尝试为键line1插入非属性列表对象(“MyProject.Formulas”)@MarkRogers您的
公式
类实现(子类)了吗
Codable
?同样,rmaddy是正确的,您应该修改全局。不,公式没有子类。我有另一个文件AllFormulas类,然后我使用init()要声明每个公式的值…它在该类中,我还声明了lineOne1的数组。然后在AddViewController中,我选择要附加的公式,并在tableView中查看MainViewController。如果需要将对象存储在UserDefaults中,我认为符合
Codable
是最佳做法。请注意ugh您通常应该使用CoreData来存储对象,而不是UserDefaults,后者更常用于首选项。我确实先使用CoreData,但在tableview中显示的公式存在问题。我开始认为UserDefaults可能是一种更简单的解决方案