Tham số cho NSKeyedArchiver archivedDataWithRootObject: được cho là mảng tôi đang cố gắng lưu hay mảng được chuyển đổi thành NSData?NSKeyedArchiver archivedDataWithRootObject:
6
A
Trả lời
12
Để chuyển đổi một mảng chung thành NSData
, bạn cần một bộ lưu trữ! Nếu bạn biết cách nạp NSData
, bạn biết cách sử dụng NSKeyedArchiver
. Vì vậy:
NSArray* array= ... ;
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:array];
Tất nhiên tất cả các yếu tố trong array
nhu cầu của bạn để thực hiện encodeWithCoder:
.
13
Câu trả lời của Yuji là đúng. nhưng chính xác hơn, yếu tố bạn của một mảng phải thực hiện giao thức và FILLIN mã của riêng bạn với các phương pháp initWithCoder: và encodeWithCoder: như:
- (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"];
}
sau đó bạn có thể sử dụng Archiver và unchariver như:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:notes];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"notes"];
NSData *notesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"notes"];
NSArray *notes = [NSKeyedUnarchiver unarchiveObjectWithData:notesData];
Để biết thêm, bạn có thể tham khảo "Archiving Objective-C Objects with NSCoding".
Các vấn đề liên quan
- 1. NSArchiver vs. NSKeyedArchiver
- 2. NSKeyedArchiver lưu định dạng nào?
- 3. NSKeyedArchiver không thành công với cấu trúc CLLocationCoordinate2D. Tại sao?
- 4. Đang tải trạng thái của Singleton từ NSKeyedArchiver
- 5. Cách giải quyết cảnh báo NSKeyedArchiver: thay thế giá trị hiện tại
- 6. Sự khác biệt với archiveRootObject: toFile: và writeToFile:
- 7. sắp xếp lại các hàng trong bảng bằng cách kéo trong Lion
- 8. Cách tạo bản sao của uiview (không phải là con trỏ đến uiview gốc)
- 9. Cách đăng ký loại tệp UTI/không phải tài liệu tùy chỉnh cho OSX để nhận dạng nó?
- 10. Báo cáo ứng dụng không chính xác Cách sử dụng/Lưu trữ
- 11. Chuyển đổi NSObject thành NSData
- 12. NSCoding VS Dữ liệu cốt lõi
- 13. iCloud & NSFileWrapper: Hiển thị dưới dạng 2 tệp khác nhau trong Cài đặt
- 14. NSKeyedUnarchiver - xóa dữ liệu được giải mã?
- 15. Cách tốt nhất để dữ liệu bộ nhớ cache trong Android
- 16. thông báo địa phương tại Foreground
- 17. iPhone: Làm cách nào để lưu trữ UIImage bằng NSUserDefaults?
- 18. NSKeyedUnarchiver unarchiveObjectWithFile: trả về nil bằng init: phương thức
- 19. float INFINITY có thể được lưu trữ bởi NSCoder, nhưng không được tìm kiếm
- 20. Trong initWithCoder: các phím trong NSCoder (một UINibDecoder) là gì? (đối với UIImageView)
- 21. Game Center Matchmaking GKTurnBasedMatch có độ trễ đáng kể (~ 1 phút)
- 22. Cách để duy trì các đối tượng MPMediaItemCollection? (được chọn từ iPod)
- 23. ứng dụng bị rơi trong khi nhập khẩu các bài hát từ thư viện Ipod trong Iphone cho iOS 5.0
- 24. Cảnh báo và sự cố bộ nhớ iPhone - nhưng Công cụ hiển thị mức sử dụng bộ nhớ thấp
Để hoàn thành, bạn sử dụng NSKeyedUnarchiver để làm ngược lại. –
"tất cả các phần tử trong mảng của bạn cần triển khai encodeWithCoder:" <- điều này chỉ cần thiết cho các đối tượng tùy chỉnh? –
tất cả các phần tử trong mảng của bạn cần phải thực hiện 'encodeWithCoder:', hoặc bởi Apple hoặc bởi bạn. Bạn có thể kiểm tra xem một đối tượng do Apple cung cấp có triển khai thực hiện hay không bằng cách xem tài liệu chính thức ... xem nó có thực hiện giao thức 'NSCoder' hay không. – Yuji