仅使用用户默认值,但显示原因:'尝试插入非属性列表对象

时间:2018-03-10 11:42:29

标签: ios swift

import UIKit

struct Task {
    var name: String
    var completed: Bool
}

class ListModel {

    var tasks: [Task] = [] // array to store tasks of todo list

    let defaluts = UserDefaults.standard

    func addTask( name: String, completed: Bool ) {   // store task with status of complete into array
        self.tasks.append( Task( name: name, completed: completed ) )
    }

    var tasksValue: [Task] { // getter and setter of array tasks
        get {
            return tasks
        }
        set {
            tasks = newValue
        }
    }

    func save() {
        defaluts.set(tasks, forKey: "tasks")
    }

    func load() {
        if let value = defaluts.array(forKey: "tasks") as? [Task] {
            tasks = value 
        }
    }
}

当我运行我的程序时,它显示由于未捕获的异常“NSInvalidArgumentException”而终止应用程序的错误,原因:'尝试插入非属性列表对象。

有人可以帮我解决一下吗?

1 个答案:

答案 0 :(得分:0)

答案很简单。您只能保存一小部分数据类型(属性列表类型:ArrayDictionaryStringDataDateIntDoubleFloatBool),可以UserDefaults或属性列表。

如果您尝试编写任何其他对象类型或包含任何其他类型的容器,则会失败。您需要将自定义对象序列化为其他类型。

此外,除了较小的用户设置值外,您不能将任何内容存储到默认值。