2009-10-11 39 views

回答

4

我不認爲NSKeyedArchiver是你的問題,因爲它不知道數組或任何東西。也許你需要在每個子類上實現NSCoding協議?

編輯:

不知道你是如何使用您的NSKeyedArchiver,但是這是你應該如何使用它:

NSMutableData *data = [NSMutableData new]; 
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
[archiver encodeObject:array forKey:@"array"]; 
[data writeToFile:filename attomically:YES]; 
[archiver release]; 
[data release]; 

後來讀它:

NSData *data = [[NSData alloc] initWithContentsOfFile:filename]; 
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; 
array = [[unarchiver objectForKey:@"array"] retain]; 
[unarchiver release]; 
[data release]; 

這裏假定array是某種類型的NSObject,包括NSArray,NSSetNSDictionary等,或其任何可變等價物。

+0

我已經實現NSCoding協議,但編碼器實例只有「encodeArrayOfObjCType:count:at」方法,它需要顯式傳遞元素的類型。我錯過了什麼嗎? –

+2

是的,你錯過了一些東西,每個類只需要自己編碼。 NSMutableArray已經知道如何自我存檔(它對一個計數進行編碼,然後對所有包含的對象進行編碼)。所以你所要做的就是在你使用的每個子類中實現initWithCoder:和encodeWithCoder:。你不需要顯式編碼數組,如果你的子類有這樣的實例變量,只需使用encodeObject:forKey:進行編碼,它就可以在任何實現NSCoder協議的類上工作,包括NSMutableArray。 – PeyloW

+0

謝謝Ed和Peylow,我想我必須使用上面提到的方法來序列化數組,並沒有注意到他們也實現了NSCoder協議。 –

相關問題