在 NSUserDefaults 和 Realm 中保存一个对象
Posted
技术标签:
【中文标题】在 NSUserDefaults 和 Realm 中保存一个对象【英文标题】:Save an object in NSUserDefaults and Realm 【发布时间】:2018-04-19 16:12:57 【问题描述】:是否可以在 NSUserDefaults 和 Realm (Swift) 中保存对象?
我在创建模型时发现了一个问题,因为 NSUserDefaults 需要继承 NSObject
而 Realm 需要继承 Object
。
这样做,引发了这个错误
Multiple inheritance from classes 'Object' and 'NSObject'
【问题讨论】:
为什么要这样保存?将 NSUserDefaults 中的值保存在对象领域 exmyobject.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 [重复]