Iphone 我能做这个吗??试图从对象本身加载对象

Iphone 我能做这个吗??试图从对象本身加载对象,iphone,loading,encoder,nscoding,decoder,Iphone,Loading,Encoder,Nscoding,Decoder,我有一个符合NSCoding协议的对象 对象包含一个将自身保存到内存的方法,如下所示: - (void)saveToFile { NSMutableData *data = [[NSMutableData alloc] init]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [archiver encodeObject:self forKey:kData

我有一个符合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];
最终,我希望使用如下代码:

一个viewController接受用户输入的输入,创建一个对象并使用

[anObject saveToFile];
第二个viewController创建一个空对象,然后通过调用以下命令将其值初始化为存储在文件中的值:

[emptyObject loadFromFile];
任何关于如何开展这项工作的建议都将不胜感激。谢谢:)


Michael

为什么不改用
initWithCoder:
?它应该返回一个使用给定编码器初始化的对象。因为您的对象符合
NSCoding
,所以这应该不是问题。

感谢您的快速回复!decodeObjectForKey:方法在尝试解码保存的数据时是否会自动使用my initWithCoder:方法?所以我不需要明确地称呼它?因此,行:self=[unarchiver decodeObjectForKey:kDataKey];或者我把这搞糊涂了?是的,但我认为您使用协议的方式是通过它的
initWithCoder:
消息。好的-但是initWithCoder:方法需要传递一个NSCoder对象-我使用什么?