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];
關於如何使這項工作的任何建議將非常感激。謝謝:)
邁克爾
感謝您的快速回復!方法decodeObjectForKey:在嘗試解碼保存的數據時是否自動使用我的initWithCoder:方法?所以我不需要明確地調用它?因此,行: self = [unarchiver decodeObjectForKey:kDataKey]; 還是我越來越糊塗了? – Smikey 2010-05-13 12:23:31
它的確如此,但我認爲你期望使用該協議的方式是通過它的'initWithCoder:'消息。 – pgb 2010-05-13 14:03:15
好的 - 但initWithCoder:方法需要傳遞一個NSCoder對象 - 我爲此使用了什麼? – Smikey 2010-05-14 10:36:56