Ist der Parameter für NSKeyedArchiver archivedDataWithRootObject: soll das Array sein, das ich zu speichern versuche, oder das Array in NSData konvertiert?NSKeyedArchiver archivedDataWithRootObject:
6
A
Antwort
12
Um ein generisches Array in ein NSData
zu konvertieren, benötigen Sie einen Archiver! Wenn Sie wissen, wie man die NSData
füttert, wissen Sie, wie man NSKeyedArchiver
benutzt. Also:
NSArray* array= ... ;
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:array];
Natürlich sind alle Elemente in Ihrem array
Bedürfnisse encodeWithCoder:
zu implementieren.
13
Yujis Antwort ist richtig. aber genauer gesagt, Ihr Element eines Arrays haben Protokoll zu implementieren und Ihren eigenen Code Methoden fillin initWithCoder: und encodeWithCoder: wie:
- (id)initWithCoder:(NSCoder *)decoder {
if (self = [super init]) {
self.title = [decoder decodeObjectForKey:@"title"];
self.author = [decoder decodeObjectForKey:@"author"];
self.published = [decoder decodeBoolForKey:@"published"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:title forKey:@"time"];
[encoder encodeObject:author forKey:@"author"];
[encoder encodeBool:published forKey:@"published"];
}
dann können Sie die Archivierungs verwenden und unchariver wie:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:notes];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"notes"];
NSData *notesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"notes"];
NSArray *notes = [NSKeyedUnarchiver unarchiveObjectWithData:notesData];
Für mehr, können Sie Referenz "Archiving Objective-C Objects with NSCoding" erhalten.
Verwandte Themen
- 1. NSKeyedArchiver archivedDataWithRootObject return nil, wenn ein Array von Image-Modellen übergeben wurde
- 2. NSKeyedArchiver init nicht genannt
- 3. NSArchiver vs NSKeyedArchiver
- 4. über NSKeyedArchiver archiveRootObject: toFile:
- 5. NSKeyedArchiver wird zweimal aufgerufen
- 6. Welches Format speichert NSKeyedArchiver?
- 7. NSKeyedArchiver mit Zeigern
- 8. NSKeyedArchiver/NSuserDefaults - Speichern eines CGRect
- 9. NSKeyedArchiver oder [NSArray writeToFile: atomar:]?
- 10. Alternative für NSKeyedArchiver/NSKeyedUnarchiver iOS
- 11. Wie speichern Sie Daten mit NSKeyedArchiver?
- 12. Kopieren UIView NSKeyedArchiver mit wirft NSInvalidUnarchiveOperationException
- 13. So konvertieren NSKeyedArchiver Objekte über neue Versionen
- 14. Speichern mit NSMutableData und NSKeyedArchiver ein UIObject
- 15. NSKeyedArchiver schlägt mit CLLocationCoordinate2D-Strukturen fehl. Warum?
- 16. NSKeyedArchiver funktioniert im iPhone Simulator, fehlschlägt auf Gerät
- 17. Verwenden von NSKeyedArchiver zum Speichern von benutzerdefinierten Datenmodell
- 18. Warum kann ich keinen NSValue in einem NSKeyedArchiver codieren?
- 19. So lösen Sie NSKeyedArchiver Warnung: Ersetzen vorhandener Wert
- 20. Speichern/Laden eines 2D-Array mit C NSKeyedArchiver
- 21. Wo würde NSKeyedArchiver normalerweise die Daten auf dem iPhone speichern?
- 22. Unterschiede mit ArchiveRootObject: toFile: und writeToFile:
- 23. - [NSKeyedUnarchiver initForReadingWithData:]: Daten sind leer; hast du vergessen, -finishEncoding an den NSKeyedArchiver zu senden?
- 24. Wie serialisiert ich ein Objekt in Datei mit NSKeyedArchiver im Format NSPropertyListXMLFormat_v1_0?
- 25. Swift - Speichern von Benutzerdaten mit NSKeyedArchiver, erhalten Fehler bei der Konvertierung zu NSArray
- 26. Fehler beim Festlegen/Abrufen von Daten mit NSKeyedArchiver/NSKeyedUnarchiver in Datei
- 27. Versuchen, Benutzerdaten in eine Datei über NSKeyedArchiver zu speichern - NSInvalidArgumentException ist, was ich bekomme, wenn ich auf Speichern
- 28. Objective C verbessern CIImage Filtergeschwindigkeit
- 29. Wie registriere ich einen benutzerdefinierten Nicht-Dokument UTI/Dateityp, damit OSX es erkennt?
- 30. Sequenzanimation mit CAAnimationGroup
Der Vollständigkeit halber verwenden Sie einen NSKeyedUnarchiver, um das Gegenteil zu tun. –
"Alle Elemente in Ihrem Array müssen encodeWithCoder implementieren:" <- Dies wird nur für benutzerdefinierte Objekte benötigt? –
Alle Elemente in Ihrem Array müssen eine Implementierung von 'encodeWithCoder:' haben, entweder von Apple oder von Ihnen. Sie können überprüfen, ob ein von Apple bereitgestelltes Objekt es implementiert oder nicht, indem Sie sich die offizielle Dokumentation ansehen ... sehen, ob es das Protokoll 'NSCoder' implementiert. – Yuji