2010-09-04 40 views
0

我有問題使用NSKeyedArchiver/NSKeyedUnarchiver保存我的對象。
我添加了方法- (id)initWithCoder:(NSCoder *)decoder- (void)encodeWithCoder:(NSCoder *)encoder。問題是,當我嘗試保存它無法正常工作的對象。
我可以想象一個問題(但我不確定是否是問題;))。我的對象中有一些數組。它們包含更多的對象(我同時實現了「編碼器」 - 方法)。那麼數組是否會調用它的對象中的方法?如何使用NSKeyedArchiver保存自己的對象?

任何可能的解決方案?

謝謝!

+0

你確定你正在嘗試存檔的對象是存檔?我沒有名單,但主要是原始的。 NSString,NSNumber,NSValue等等。 – 2010-09-04 21:27:38

+0

您是否使用'encodeObject:forKey:'在密鑰存檔中進行編碼? – asandroq 2010-09-04 21:30:37

回答

5

在頭文件中表明您的類將實現NSCoding協議,如<NSCoding>

encodeWithCoder方法,你需要編碼所有要保存像這樣的字段:

[encoder encodeObject:array1 forKey:@"array1"]; 

然後在initWithCoder方法中,解碼被編碼的字段:

array1 = [coder decodeObjectForKey:@"array1"]; 

是su所有編碼的容器只包含也實現協議的對象。這可以是核心類,例如NSString,NSNumber,NSArray,NSDictionary,以及您自己的自定義對象。

如果你的項目沒有使用,你需要保留或複製檔案檢索,像這樣的數據垃圾收集:

array1 = [[coder decodeObjectForKey:@"array1"] retain]; 
+0

非常感謝! – 2010-09-05 09:25:04

+0

那麼......現在我有下一個問題:當我有一個由我自己的其他對象繼承的對象時,我該如何行動。一個工作得很好,但只要我繼承它不起作用 – 2010-09-06 14:59:56

+0

- (id)initWithCoder:(NSCoder *)coder {if(self = [super initWithCoder:coder]){ – 2010-09-07 01:43:00

相關問題