У меня есть объект, который соответствует протоколу 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