在 NSUserDefaults 和 Realm 中保存一个对象

Posted

技术标签:

【中文标题】在 NSUserDefaults 和 Realm 中保存一个对象【英文标题】:Save an object in NSUserDefaults and Realm 【发布时间】:2018-04-19 16:12:57 【问题描述】:

是否可以在 NSUserDefaultsRealm (Swift) 中保存对象?

我在创建模型时发现了一个问题,因为 NSUserDefaults 需要继承 NSObject 而 Realm 需要继承 Object

这样做,引发了这个错误

Multiple inheritance from classes 'Object' and 'NSObject'

【问题讨论】:

为什么要这样保存?将 NSUserDefaults 中的值保存在对象领域 ex myobject.id = NSUserDefaults.standardUserDefaults().objectForKey("id") as Int 中的变量中 查看此答案以将 Swift 对象保存到 UserDefaults ***.com/a/48438338/4644528 【参考方案1】:

使用 Swift4 的Codable 协议,您可以将自定义类保存到UserDefaults,而不必遵循旧的NSCoding 协议。

class Team: Object, Codable 
    @objc dynamic var id:Int = 0
    @objc dynamic var name:String = ""


let team = Team()
team.id = 1
team.name = "Team"
let encodedTeam = try! JSONEncoder().encode(team)
UserDefaults.standard.set(encodedTeam, forKey: "team")
let decodedTeam = try! JSONDecoder().decode(Team.self, from: UserDefaults.standard.data(forKey: "team")!)

这解决了多重继承的问题,因为您的类型不再需要从NSObject 继承。

【讨论】:

以上是关于在 NSUserDefaults 和 Realm 中保存一个对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在一个 UITextField 中设置两个不同的 NSUserDefaults

Apple Watch、WatchKit 和 NSUserDefaults [重复]

NSUserDefaults 自动加载和保存数据

iPhone:NSUserDefaults 存储在哪里?

如何在 swift 中保存和读取 NSUserdefaults 中的数组数组?

(Swift) 将数组存储和检索到 NSUserDefaults