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];
この作業を行う方法についての提案は、非常に高く評価されます。ありがとう :)
マイケル