NSMutableArray исчезает после уничтожения или перезапуска приложения с помощью NSKeyedArchiver - PullRequest
0 голосов
/ 14 июня 2011

У меня есть приложение, которое хранит Task объекты (пользовательский класс) внутри NSMutableArray.Класс Task соответствует протоколам NSCoding и NSCopying, и я также реализовал методы encodeWithCoder и initWithCoder.

Когда пользователь добавляет новую задачу в NSMutableArraylist, я сохраняю массив, используя 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 данные остаются на месте.

1 Ответ

1 голос
/ 14 июня 2011

Вам необходимо сохранить данные
([NSKeyedArchiver archiveRootObject:updatedList toFile:kFilename]; в applicationWillTerminate методе делегата, а также сохранить их по окончании.Гарантируется в IOS4.0 и выше.

Лучше всего проверить состояние возврата archiveRootObject:toFile: и посмотреть, правильно ли хранятся данные. Как вы выяснили, это может быть случай с неверным путем к файлу.

...