我可以这样做吗?试图从内部加载一个对象

时间:2010-05-13 11:38:24

标签: iphone loading encoder nscoding decoder

我有一个符合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];

对于如何完成这项工作的任何建议都将非常感激。谢谢:)

迈克尔

1 个答案:

答案 0 :(得分:1)

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