如何在 NSUserDefaults Swift 2.3 中保存单例对象?
Posted
技术标签:
【中文标题】如何在 NSUserDefaults Swift 2.3 中保存单例对象?【英文标题】:How to save Singletone object in NSUserDefaults Swift2.3? 【发布时间】:2017-08-17 07:08:36 【问题描述】:class AddBodyMeasurments
static let sharedInstance = AddBodyMeasurments()
var BodyMeasurements:AddMeasurment!
private init()
BodyMeasurements = AddMeasurment.init(json: [:])
func SaveValue(value:AddMeasurment)
BodyMeasurements = value
我尝试了以下方法:
let data = NSKeyedArchiver.archivedDataWithRootObject(obj)
NSUserDefaults.standardUserDefaults().setObject(data, forKey: "folks")
我收到以下错误:
2017-08-17 12:37:46.009 Fiyre[15749:1061631] *** NSForwarding: 警告:“Fiyre.AddBodyMeasurments”类的对象 0x7fca71d18700 没有实现 methodSignatureForSelector: -- 前面的麻烦 无法识别的选择器 -[Fiyre.AddBodyMeasurments 替换ObjectForKeyedArchiver:]
谢谢提前。
【问题讨论】:
***.com/questions/37980432/… 谢谢,但我必须存储单例对象 【参考方案1】:错误消息显示该类不是从NSObject
继承的。
NSObject
继承必须符合NSCoding
。
归档自定义类需要NSCoding
。
【讨论】:
【参考方案2】:实际上,您保存的不是单例对象,而是一般的对象。反序列化对象后(从 NSUserDefaults 获取其实例),您将将该实例存储到您的单例对象中,或者更准确地说,您将使用反序列化的对象实例化您的单例对象。
class AddBodyMeasurments
static let sharedInstance = AddBodyMeasurments()
var bodyMeasurements:AddMeasurment!
private init()
// deserializing object of AddBodyMeasurments type from NSDefaults.
let deserialized = getFromUserDefaults()
self.bodyMeasurements = deserialized.bodyMeasurements
【讨论】:
以上是关于如何在 NSUserDefaults Swift 2.3 中保存单例对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何在swift中保存NSUserDefaults中的颜色?
如何使用 NSUserDefaults 在 Swift 中存储自定义类数组?
如何在 NSUserDefaults Swift 2.3 中保存单例对象?
杀死/退出应用程序后,如何在 UITableView 中使用 NSUserDefaults 显示自定义单元格,Xcode Swift