У меня есть пользовательский объект (который является словарем строк), который создается, когда пользователь нажимает кнопку.Как использовать NSCoding для сохранения пользовательского объекта в массив с помощью NSUserDefaults в Swift?
При создании этого объекта, я использую следующий код для добавления, а затем сохранить его в массив:
createdObjectsArray.append(createdObject) // Append the object to the array
NSUserDefaults.standardUserDefaults().setObject(NSKeyedArchiver.archivedDataWithRootObject(createdObjectsArray), forKey: "createdObjectsArray")
NSUserDefaults.standardUserDefaults().synchronize()
Я объявил createdObjectsArray
как:
var createdObjectsArray = NSUserDefaults.standardUserDefaults().objectForKey("createdObjectsArray") as? [CustomObject] ?? [CustomObject]()
Однако, мой код для сохранения массива, похоже, не работает, поскольку количество элементов, содержащихся в массиве, равно 0, когда приложение полностью закрыто на iOS.
см ниже моей декларации CustomObject
:
class CustomObject : NSObject, NSCoding {
var objectName: String?
var objectColour: String?
var objectWeight: String?
init(json: NSDictionary) { // Dictionary object
self.objectName = json["objectName"] as? String
self.objectColour = json["objectColour"] as? String
self.objectWeight = json["objectWeight"] as? String
}
required init?(coder aDecoder: NSCoder) {
self.objectName = aDecoder.decodeObjectForKey("objectName") as? String;
self.objectColour = aDecoder.decodeObjectForKey("objectColour") as? String;
self.objectWeight = aDecoder.decodeObjectForKey("objectWeight") as? String;
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(self.objectName, forKey: "objectName");
aCoder.encodeObject(self.objectColour, forKey: "objectColour");
aCoder.encodeObject(self.objectWeight, forKey: "objectWeight");
}
}
Я на самом деле не получаю никаких сообщений об ошибках, выводимых на консоль, когда элементы добавляются в массив, вместо этого, createdObjectsArray
просто пустым. У меня есть подозрения, что проблема заключается либо в первоначальном объявлении моего объекта, либо в том, как я сохраняю элементы в массиве (просто добавляя его).
Я использую: 'NSUserDefaults.standardUserDefaults(). SetObject (NSKeyedArchiver.archivedDataWithRootObject (createdObjectsArray), forKey:" createdObjectsArray ")' - есть ли какие-либо указания, почему это не будет работать? –