代码之家  ›  专栏  ›  技术社区  ›  Smikey

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

  •  0
  • Smikey  · 技术社区  · 15 年前

    我有一个符合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创建一个空对象,然后通过调用以下命令将其值初始化为存储在文件中的值:

    [emptyObject loadFromFile];
    

    关于如何使这项工作的任何建议都将受到极大的赞赏。谢谢)

    迈克尔

    1 回复  |  直到 15 年前
        1
  •  1
  •   pgb    15 年前

    你为什么不用 initWithCoder: 相反?它应该返回一个用给定的编码器初始化的对象。因为你的物体符合 NSCoding 这不应该是个问题。