2010-05-13 86 views
0

我有一個符合NSCoding協議的對象。我可以這樣做嗎?試圖加載自己的對象

對象包含一個方法來拯救自己到內存中,像這樣:

- (void)saveToFile { 
NSMutableData *data = [[NSMutableData alloc] init]; 
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
[archiver encodeObject:self forKey:kDataKey]; 
[archiver finishEncoding]; 
[data writeToFile:[self dataFilePath] atomically:YES]; 
[archiver release]; 
[data release]; 
} 

這一切正常。但是我還想初始化這個對象的空白版本,然後調用它自己的'Load'方法來將文件中存在的任何數據加載到它的變量中。所以我創建了以下內容:

- (void)loadFromFile { 
NSString *filePath = [self dataFilePath]; 
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { 
    NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]]; 
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; 
    self = [unarchiver decodeObjectForKey:kDataKey]; 
    [unarchiver finishDecoding]; 
} 
} 

現在,第二種方法不能加載任何變量。這條線不可能嗎?

self = [unarchiver decodeObjectForKey:kDataKey]; 

最後,我想用這樣的代碼:使用

[anObject saveToFile]; 

一個的viewController需要用戶輸入的輸入,創建一個對象,並將其保存到存儲器和第二的viewController創建一個空的對象,然後通過調用將它的值初始化爲存儲在文件中的值:

[emptyObject loadFromFile]; 

關於如何使這項工作的任何建議將非常感激。謝謝:)

邁克爾

回答

1

你爲什麼不使用initWithCoder:呢?它應該返回給你一個給定的編碼器初始化的對象。由於你的對象符合NSCoding,這不應該是一個問題。

+0

感謝您的快速回復!方法decodeObjectForKey:在嘗試解碼保存的數據時是否自動使用我的initWithCoder:方法?所以我不需要明確地調用它?因此,行: self = [unarchiver decodeObjectForKey:kDataKey]; 還是我越來越糊塗了? – Smikey 2010-05-13 12:23:31

+0

它的確如此,但我認爲你期望使用該協議的方式是通過它的'initWithCoder:'消息。 – pgb 2010-05-13 14:03:15

+0

好的 - 但initWithCoder:方法需要傳遞一個NSCoder對象 - 我爲此使用了什麼? – Smikey 2010-05-14 10:36:56

相關問題