2

我有一堂课说,

class GroupClass{
    var groupId: String = ""
    var groupName: String = ""
}

我希望能够将其对象存储在NSUserDefaults. 我试过这个方法

let group = GroupClass()
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(group, forKey: "group")
defaults.synchronize()

并按照以下方式检索它,

let defaults = NSUserDefaults.standardUserDefaults()        
var group = defaults.objectForKey("group") as! GroupClass

它抛出异常Using non-property obect并崩溃。在 Swift 中做这件事的正确方法是什么?

还尝试了以下方法,

class GroupClass{
    var groupId: String = ""
    var groupName: String = ""

    required init(coder aDecoder: NSCoder) {
        self.groupId = aDecoder.decodeObjectForKey("groupId") as! String
        self.groupName = aDecoder.decodeObjectForKey("groupName") as! String

    }

    func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeObject(self.groupId, forKey: "groupId")
        aCoder.encodeObject(self.groupName, forKey: "groupName")

    } 
}

但是,let group = GroupClass(coder:NSCoder())给出问题。

4

1 回答 1

2

您无法将类引用保存到userdefault. group 是您班级的参考。你为什么要保存它。它只是将您的课程指向记忆。完成任务后将被销毁。userdefaults 用于存储字符串、数组、字典等数据。您不需要在数据库中存储引用。我不这么认为。

您可以在 userdefaults 中设置 group.groupId 或 group.groupName。然后,如果您想存储它,那么您可以将其转换为nsdataby并在需要时NSKeyedArchiver将该数据保存到它。nsuserdefaultunarchiveNSKeyedUnArchiver

希望这会有所帮助:)

于 2016-04-23T10:05:55.673 回答