iOS - Как сохранить и прочитать файл с помощью архивации?

Я новичок в Xcode, и мне действительно нужна помощь в этом.

Я пытаюсь использовать архивацию для сохранения файла с массивом элементов и пытаюсь прочитать и поместить их в табличное представление.

Проблема в том, что когда я закрываю приложение, а затем запускаю его снова, когда я сохраняю данные в файл, он перезаписывает существующий файл, и все сохраненные данные удаляются.

Я использую эти методы для хранения данных в файле:

-(id)init
{

    if(self = [super init])
    {
        _appSupportPath = [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES)lastObject];

        if (!_appSupportPath)
            return nil;

        _repositoryPath = [_appSupportPath stringByAppendingPathComponent:FILE_NAME];

        if (_data == nil)
            _data = [[NSMutableDictionary alloc] init];
    }
    return self;
}

-(void)saveToFile
{

    dispatch_queue_t writeQueue = dispatch_queue_create("MyApp:file:write", NULL);

    NSMutableDictionary *localData = [NSMutableDictionary dictionaryWithDictionary:_data];

    dispatch_async(writeQueue, ^{
        NSFileManager *fileManager = [NSFileManager defaultManager];
        if(![fileManager fileExistsAtPath:_appSupportPath])
            [fileManager createDirectoryAtPath:_appSupportPath withIntermediateDirectories:YES attributes:nil error:NULL];
        [NSKeyedArchiver archiveRootObject:localData toFile:_repositoryPath];
    });

}

Любая помощь?

Пожалуйста, дайте мне знать, есть ли лучший/более простой способ хранения файлов, о котором я не знаю.

заранее спасибо


person Joaocdn    schedule 09.11.2012    source источник


Ответы (1)


Вы правильно сохраняете. Прочитайте его при запуске в инициализации:

_data = [[NSKeyedUnarchiver unarchiveObjectWithFile:_repositoryPath] retain];

if (_data == nil)
    _data = [[NSMutableDictionary alloc] init];
person Davyd Geyl    schedule 09.11.2012
comment
О, я пропустил эту строку, это просто сработало из коробки! Спасибо, мужик! - person Joaocdn; 09.11.2012