Я некоторое время читал и искал, как сохранить пользовательский объект в "NSUserDefaults". До сих пор у меня есть решения, которые позволяют мне достичь этого, внедрив «NSCoding» в свой пользовательский объект. Примеры, которые я получил, основаны на очень простых объектах, но в моем случае я сталкиваюсь с этой проблемой в существующем пользовательском классе, который имеет сложную структуру и содержит другой пользовательский класс.
class MyCustomClass:NSObject, NSCoding{
let codingTagSecondClass = "codingTagSecondClass"
var mySecondClass:MySecondCustomClass?
...
let codeingTagaString = "codeingTagaString"
var aString = "aString"
}
И я реализовал такие методы NSCoding, как:
required init?(coder aDecoder: NSCoder) {
aString = aDecoder.decodeObject(forKey: codeingTagaString) as! String
mySecondClass = aDecoder.decodeObject(forKey: codingTagSecondClass) as? mySecondClass:MySecondCustomClass
}
func encode(with aCoder: NSCoder) {
aCoder.encode(aString, forKey: codeingTagaString)
aCoder.encode(mySecondClass, forKey: codingTagSecondClass)
}
и вот как я хранил в NSUserDefaults
let archivedObject = NSKeyedArchiver.archivedData(withRootObject: myCustomObject!)
let defaults = UserDefaults.standard
defaults.set(archivedObject, forKey: defaultUserCurrentServerProxy)
Эта реализация работает только для String var, но вылетает, когда я пытаюсь сделать это с моим secondCustomClass ...
Я могу представить, что это потому, что «MySecondCustomClass» не реализует «NSCoding». это верно? Есть ли другой способ достичь того, что я пытаюсь сделать? Мой класс Custom имеет структуру, большую, чем та, которую я здесь показываю, поэтому, прежде чем я приступлю к программированию или продумыванию другой альтернативы, мне нужно знать.
Большое спасибо.