【问题标题】:Save custom object to NSUserDefaults in Swift [duplicate]在 Swift 中将自定义对象保存到 NSUserDefaults [重复]
【发布时间】:2016-04-23 09:58:36
【问题描述】:

我有一个班级说,

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()) 有问题。

【问题讨论】:

  • 为此使用 NSKeyedArchiver
  • @EICaptain 能否提供演示代码,我是 Swift 新手。
  • 第二个答案是 swift stackoverflow.com/questions/19720611/…
  • @EICaptain 我试过这种方式let group = GroupClass(coder:NSCoder()) 这会出现问题
  • 完整的解决方案在那个答案中......仔细检查..可能有一些错误

标签: ios swift swift2 nsuserdefaults swift2.2


【解决方案1】:

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

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

希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    相关资源
    最近更新 更多