-2
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 replacementObjectForKeyedArchiver: ]

谢谢提前。

4

2 回答 2

1

错误消息显示该类不继承自NSObject.

  • 需要继承 fromNSObject以符合NSCoding.
  • NSCoding需要归档自定义类。
于 2017-08-17T07:20:23.827 回答
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
    }
}
于 2017-08-17T08:59:17.627 回答