【问题标题】:How to save Singletone object in NSUserDefaults Swift2.3?如何在 NSUserDefaults Swift 2.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:]

谢谢提前。

【问题讨论】:

标签: swift userdefaults


【解决方案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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 2021-04-29
      • 1970-01-01
      相关资源
      最近更新 更多