iOS Swift 将领域对象存储到 UserDefaults.standard
Posted
技术标签:
【中文标题】iOS Swift 将领域对象存储到 UserDefaults.standard【英文标题】:iOS Swift Storing Realm Object to UserDefaults.standard 【发布时间】:2017-04-07 08:51:16 【问题描述】:这是我的领域对象:
PracticeAreaEntity
id = 0;
c_id = 21871;
c_number = C.C/1/2016;
c_title = Title Here;
date = 2017-04-07T00:00:00.000Z;
description2 = ;
object = "id":205039,"c_id":21871,"name":"07-04-2017","s_time":"2017-04-07T00:00:00.000Z","e_time":"2017-04-08T00:00:00.000Z","creator":"system","created_by_id":null,"description":null,"c_at":"2017-03-26T00:11:52.134Z","u_at":"2017-04-07T01:00:27.396Z","judge":null,"phearing":null,"google_event_id":null,"is_completed":false,"business":null,"last_notified":"2017-04-07T01:00:27.382Z","ng_date":null,"b_date":null,"b_d_available":false;
p_id = 205039;
subject = 07-04-2017;
type = Event;
我需要将此领域对象存储到 UserDefault.standard 并在另一个页面中取回值。这是我的 UserDefults 代码:
let userDefaults = UserDefaults.standard
userDefaults.set(filteredtotalContactArray[indexPath.row], forKey: "SelectedPractice")
userDefaults.synchronize()
filteredtotalContactArray[indexPath.row] 等于我之前指定为领域对象的值。但我收到错误
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object
【问题讨论】:
为什么在使用Realm
时尝试将对象存储在UserDefault
中?这是一个不好的做法,另外,将自定义对象存储在UserDefault
需要面对NSCoding
协议,这会将您的对象转换为数据
在表格视图中,我正在显示我的领域中的对象列表。我需要将选定的索引 path.row 值存储到 UserDefaults.standard
我们无法直接存储自定义对象,您需要了解 Keyarchiver 概念
看到这个***.com/questions/37980432/…
我也试过了。这是存储值的代码:let userDefaults = UserDefaults.standard let encodedData = NSKeyedArchiver.archivedData(withRootObject: (filteredtotalContactArray[indexPath.row] as AnyObject)) userDefaults.set(encodedData, forKey: "SelectedPractice") userDefaults.synchronize()
但它不起作用
【参考方案1】:
您需要为您的领域模型提供NSCoding
的一致性方法,以便能够将它们持久化到UserDefaults
。
但是,鉴于您已经在应用中使用 Realm,我建议您使用 Realm 来持久化 Realm 模型。
【讨论】:
以上是关于iOS Swift 将领域对象存储到 UserDefaults.standard的主要内容,如果未能解决你的问题,请参考以下文章
如何将推送通知令牌存储到外部数据库 - iOS 10,Swift 3