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];
 } 
}

この 2 番目の方法では、変数をロードできません。この行はおそらく不可能ですか?

self = [unarchiver decodeObjectForKey:kDataKey];

最終的には、次のようなコードを使用したいと思います。

1 つの viewController は、ユーザーが入力した入力を受け取り、オブジェクトを作成し、次を使用してメモリに保存します。

[anObject saveToFile];

そして、2 番目の viewController は空のオブジェクトを作成し、次を呼び出して、その値をファイルに保存されている値に初期化します。

[emptyObject loadFromFile];

この作業を行う方法についての提案は、非常に高く評価されます。ありがとう :)

マイケル

4

1 に答える 1

1

initWithCoder:代わりに使ってみませんか?指定されたコーダーで初期化されたオブジェクトを返す必要があります。オブジェクトは に準拠しているためNSCoding、これは問題になりません。

于 2010-05-13T12:06:59.993 に答える