Wie zum speichern von array-Liste von benutzerdefinierten Objekten zu NSUserDefaults?
class Item
{
var name: String
var collectionId: Int
init(name: String, collectionId: Int) {
self.name = name
self.collectionId = collectionId
}
}
class ViewController:UIViewController
{
var itemList = [Item]()
func recievedResults()
{
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(self.itemList, forKey: "myList")
}
}
Bekomme ich die Fehlermeldung: "property-Listen nicht enthalten Objekte vom Typ 'CFType'"
Wie kann ich speichern und erhalten die itemList zu NSUserDefaults?
- In Objective-c, NSUserdefaults akzeptiert nur primitif Daten: NSArray, NSString ,... Zu speichern benutzerdefinierte Objekt in NSUserdefaults, verwenden Sie die NSKeyedArchiver (und NSKeyedUnarchiver) mit dem hinzufügen von Coder & Decoder-Methode, um Ihre Klasse. Ich denke, es gilt die gleiche Regel in Swift.
- Sie sollten nicht speichern Sie ein NSArray in NSUserDefaults. Verwenden Sie eine plist statt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie implementieren Protokoll NSCoding für Ihre benutzerdefinierte Klasse. Sehen Sie sich bitte die Swift-Beispiel.
Erste, Sie haben zu Erben, Item von NSObject, mit coder & decoder Methoden:
Dann sind diese Funktionen zum einfügen von & abrufen von NSUserDefaults.
Beispiel:
Wie bereits in diese stack overflow Frage-man kann nicht speichern Sie benutzerdefinierte Objekte in NSUserDefaults.
Aber Sie können Ihre Klasse NSCoding-konform und speichern NSData von NSKeyedArchiver.archivedDataWithRootObject(...):