Czy parametr dla NSKeyedArchiver archivedDataWithRootObject: przypuszczalnie jest to tablica, którą próbuję zapisać, lub tablica przekonwertowana na NSData?NSKeyedArchiver archivedDataWithRootObject:
6
A
Odpowiedz
12
Aby przekonwertować ogólną tablicę na NSData
, potrzebujesz archiwizatora! Jeśli wiesz, jak karmić NSData
, wiesz, jak korzystać z NSKeyedArchiver
. Więc:
NSArray* array= ... ;
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:array];
Oczywiście wszystkie elementy w swoich array
musi wdrożyć encodeWithCoder:
.
13
Odpowiedź Yuji jest słuszna. ale dokładniej, twój element tablicy trzeba zaimplementować protokół i wypełniam swój własny kod do metod initWithCoder a encodeWithCoder: jak:
- (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"];
}
następnie można użyć do archiwizacji i unchariver jak:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:notes];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"notes"];
NSData *notesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"notes"];
NSArray *notes = [NSKeyedUnarchiver unarchiveObjectWithData:notesData];
Aby uzyskać więcej informacji, można uzyskać odwołanie "Archiving Objective-C Objects with NSCoding".
Powiązane problemy
- 1. NSArchiver vs. NSKeyedArchiver
- 2. Ładowanie stanu Singletona z NSKeyedArchiver
- 3. Kopiowanie UIView użyciu NSKeyedArchiver rzuca NSInvalidUnarchiveOperationException
- 4. Jak rozwiązać ostrzeżenie NSKeyedArchiver: zastępowanie istniejącej wartości
- 5. Używanie NSKeyedArchiver do przechowywania własnego modelu danych
- 6. NSKeyedArchiver kończy się niepowodzeniem ze strukturami CLLocationCoordinate2D. Czemu?
- 7. Różnice z archiveRootObject: toFile: and writeToFile:
- 8. Przechowywanie danych json na iPhonie: zapisz ciąg json, tak jak jest, VS uczyń obiekt z json i użyj NSCoding + NSKeyedArchiver
- 9. Zmiana kolejności wierszy tabeli przez przeciąganie w Lion
- 10. Tworzenie kopii uiview (nie wskaźnika do oryginalnego widoku)
- 11. Zgłaszanie aplikacji niedokładne Użycie/przechowywanie
- 12. Jak zarejestrować niestandardowy UTI/typ pliku dla OSX, aby go rozpoznać?
- 13. iOS Swift: Lokalna utrwalalność z CloudKit
- 14. Jak przeprowadzić test NSCoding na urządzeniu?
- 15. Jak zapisać token dostępu LinkedIn za pomocą zestawu SDK iOS?
- 16. Potrzebujesz pomocy na Bump Api wysyłanie obrazów
- 17. Jak przekazać NSData jako NSString i odzyskać?
- 18. float INFINITY może być zarchiwizowany przez NSCoder, ale nie został zdekarchiwizowany
- 19. NSKeyedUnarchiver unarchiveObjectWithFile: zwraca zero w init: metoda
- 20. Czy mogę zakodować podklasę obiektu NSManagedObject?
- 21. IOS: Save Array, gdy aplikacja jest blisko lub wprowadź tło
- 22. Local zawiadomienie w Planie
- 23. Zdezarchiwizuj obiektu UIImage zwraca CGSizeZero obraz przy użyciu NSKeyedUnarchiver na iOS 8
- 24. iPhone: Wysyłanie dużych danych przy użyciu zestawu gier
- 25. W initWithCoder: jakie są klucze w NSCoder (UINibDecoder)? (dla UIImageView)
- 26. Udostępnione wystąpienie NSHTTPCookieStorage nie utrzymuje plików cookie
- 27. Jak przekonwertować obiekt UIImage utworzony z CGImageRef na surowe dane iz powrotem
- 28. NSInvalidUnarchiveOperationException nie może zdekodować błędu obiektu w rozszerzeniu Apple Watch
- 29. NSKeyedUnarchiver unarchiveObjectWithData return nil
- 30. Zapisywanie i przywracanie stosów UINavigation w celu ponownego połączenia
Dla kompletności, używasz NSKeyedUnarchiver, aby wykonać odwrotność. –
"wszystkie elementy w twojej tablicy muszą implementować encodeWithCoder:" <- jest to wymagane tylko w przypadku obiektów niestandardowych? –
wszystkie elementy w twojej tablicy muszą mieć implementację 'encodeWithCoder:', przez Apple lub przez ciebie. Możesz sprawdzić, czy obiekt dostarczony przez Apple zaimplementował go, sprawdzając oficjalną dokumentację ... czy implementuje protokół 'NSCoder'. – Yuji