是NSKeyedArchiver的參數archivedDataWithRootObject:應該是我想要保存的數組,或將數組轉換爲NSData?NSKeyedArchiver archivedDataWithRootObject:
6
A
回答
12
要將通用數組轉換爲NSData
,您需要存檔器!如果你知道如何餵養NSData
,你知道如何使用NSKeyedArchiver
。所以:
NSArray* array= ... ;
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:array];
當然你array
需要的所有元素來實現encodeWithCoder:
。
13
Yuji的回答是對的。但更準確的說,您的數組元素必須實現協議和FILLIN自己的代碼來的initWithCoder方法:和encodeWithCoder: 像:
- (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"];
}
,那麼你可以使用歸檔和unchariver,如:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:notes];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"notes"];
NSData *notesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"notes"];
NSArray *notes = [NSKeyedUnarchiver unarchiveObjectWithData:notesData];
欲瞭解更多,可以參考「Archiving Objective-C Objects with NSCoding」。
相關問題
- 1. NSKeyedArchiver archivedDataWithRootObject:不會調用encodeWithCoder
- 2. NSKeyedArchiver不能存檔陣列
- 3. 發生崩潰[的NSKeyedArchiver archivedDataWithRootObject:self.data]
- 4. NSKeyedArchiver&NSKeyedUnarchiver/Swift 3.0
- 5. 關於NSKeyedArchiver archiveRootObject:toFile:
- 6. 問題與NSKeyedArchiver
- 7. NSDictionary或NSKeyedArchiver
- 8. NSKeyedArchiver性能
- 9. SceneKit和NSKeyedArchiver
- 10. NSArchiver與NSKeyedArchiver
- 11. iPhone + NSCoding/NSKeyedArchiver
- 12. 同步NSKeyedArchiver或NSUserDefaults
- 13. NSKeyedArchiver內部格式
- 14. NSArchiver vs NSKeyedArchiver性能
- 15. 的NSKeyedArchiver INIT不叫
- 16. NSKeyedArchiver archiveRootObject和NSFileProtectionComplete/NSFileProtectionCompleteUnlessOpen
- 17. 的NSKeyedArchiver與NSMutableArrays和OData的對象導致內存泄漏
- 18. MKPolyline - > NSKeyedArchiver - > NSData SIGABRT
- 19. 的NSKeyedArchiver和的NSFileManager問題
- 20. 不NSUserDefaults的使用的NSKeyedArchiver
- 21. NSKeyedArchiver:鍵返回零 - Swift
- 22. 提取的NSString從的NSKeyedArchiver
- 23. NSKeyedArchiver線程安全嗎?
- 24. 保存數據時的NSKeyedArchiver
- 25. 使用NSKeyedArchiver時崩潰
- 26. 從NSKeyedArchiver到NSString的NSData
- 27. 使用NSKeyedArchiver寫數據
- 28. 的NSKeyedArchiver重複發出
- 29. NSKeyedArchiver archiveRootObject不斷返回否
- 30. NSKeyedArchiver的默認目錄
爲了完整起見,您使用NSKeyedUnarchiver進行相反操作。 – 2011-01-12 09:07:45
「數組中的所有元素都需要實現encodeWithCoder:」< - 這僅僅是自定義對象需要的嗎? – 2013-11-07 01:28:35
數組中的所有元素都需要由Apple或您執行'encodeWithCoder:'的實現。您可以通過查看官方文檔來檢查Apple提供的對象是否實現它...查看它是否實現了協議「NSCoder」。 – Yuji 2013-11-08 04:57:37