У меня есть приложение, которое хранит объекты 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, данные остаются на месте.