2017-08-17 46 views
-3
class AddBodyMeasurments 
{ 
    static let sharedInstance = AddBodyMeasurments() 
    var BodyMeasurements:AddMeasurment! 

    private init() 
    { 
     BodyMeasurements = AddMeasurment.init(json: [:]) 
    } 
    func SaveValue(value:AddMeasurment) 
    { 
     BodyMeasurements = value 
    } 
} 

我曾尝试以下:如何在NSUserDefaults Swift2.3中保存Singletone对象?

let data = NSKeyedArchiver.archivedDataWithRootObject(obj) 
NSUserDefaults.standardUserDefaults().setObject(data, forKey: "folks") 

我收到以下错误:

2017年8月17日12:37:46.0​​09 Fiyre [15749:1061631 *** NSForwarding : 警告:类'Fiyre.AddBodyMeasurments'的对象0x7fca71d18700' 未实现methodSignatureForSelector: - 未知的故障 无法识别的选择器 - [Fiyre.AddBodyMeasurments replacementObjectForKeye drd]:

谢谢提前。

+0

https://stackoverflow.com/questions/37980432/swift-3-saving-and-retrieving-custom-object-from-userdefaults – Ivan

+0

谢谢,但我必须存储Singleton对象 –

回答

1

错误消息显示该类不从NSObject继承。

  • 需要继承NSObject以符合NSCoding
  • NSCoding是归档自定义类所必需的。
0

实际上,你并没有保存一个单独的对象,而是一个对象。在你反序列化你的对象之后(从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 
    } 
} 
相关问题