У меня есть приложение, которое хранит Task
объекты (пользовательский класс) внутри NSMutableArray
.Класс Task
соответствует протоколам NSCoding
и NSCopying
, и я также реализовал методы encodeWithCoder
и initWithCoder
.
Когда пользователь добавляет новую задачу в NSMutableArray
list
, я сохраняю массив, используя NSKeyedArchiver
.list
заполняет UITableView
.
. Данные сохраняются, и когда я выхожу из приложения и снова входите, данные все еще там.Когда я какое-то время пользуюсь другим приложением и возвращаюсь, данные все еще там.Однако когда я «убиваю» приложение в многозадачной задаче управления или перезапуска устройства, данные исчезают.Вот некоторые важные фрагменты кода:
#define kFilename @"epapsTasksFile"
.
- (NSString *)dataFilePath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return [documentsDirectory stringByAppendingPathComponent:kFilename];
}
- (void)viewDidLoad {
NSString *filePath = [self dataFilePath];
if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
self.list = [[NSKeyedUnarchiver unarchiveObjectWithFile:kFilename] retain];
}
else {
self.list = [NSMutableArray arrayWithCapacity:1];
}
...
}
- (void)applicationWillResignActive:(NSNotification *)notification {
NSMutableArray *updatedList = [[NSMutableArray alloc] initWithArray:self.list];
[NSKeyedArchiver archiveRootObject:updatedList toFile:kFilename];
}
Почему мое приложение не сохраняет данные, когда приложение "убито" или устройство перезапущено?Также может быть интересно отметить, что при перезапуске симулятора iPhone данные остаются на месте.