将自定义对象保存到Swift中的NSUserDefaults

时间:2016-04-23 09:58:37

标签: ios swift swift2 nsuserdefaults swift2.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())会产生问题。

1 个答案:

答案 0 :(得分:2)

您无法将课程参考保存到userdefault。小组是你班级的参考。为什么要保存它。它只是将你的课程指向内存。完成它的任务后它会被破坏。 userdefaults用于存储字符串,数组,字典等数据,您不需要在数据库中存储引用。我不这么认为。

您可以在userdefaults中设置group.groupId或group.groupName。然后,如果你想存储它,那么你可以在nsdata NSKeyedArchiver之前将其转换为nsuserdefault,并在unarchive需要时将其保存到NSKeyedUnArchiver`ssh expert\@x.x.x.x` }。

希望这会有所帮助:)