iOS кодирует / декодирует представления и изображения в файл в каталоге Documents - PullRequest
0 голосов
/ 06 ноября 2011

У меня есть объект, который имеет NSMutableArray пользовательских UIViews, UIImage и пару строк.

Я беру этот объект и помещаю его в словарь. Словарь попадает в NSData, затем я делаю это:

NSString *path;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
path = [paths objectAtIndex:0];

NSString *fileName = DATA;
path = [path stringByAppendingPathComponent:fileName];

NSMutableData *data = [[NSMutableData alloc]init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
[archiver encodeObject:dict forKey: DATA];
[archiver finishEncoding];

[[NSFileManager defaultManager] createFileAtPath:path
                                        contents:data
                                      attributes:nil];

Сохраняется успешно. Когда я пытаюсь загрузить данные, файловая система показывает, что мой объект был сохранен, но когда я пытаюсь декодировать, он говорит, что мои данные равны NULL.

Вот мой код декодирования:

-(NSDictionary*)loadData
{
NSString *path;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,    NSUserDomainMask, YES);
path = [paths objectAtIndex:0];
NSArray *directoryContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:NULL];

if (directoryContent != nil && [directoryContent count] > 0)
{
    NSLog(@"CONTENT COUNT: %d",[directoryContent count]);
    NSString *fileName = DATA;
    path = [path stringByAppendingPathComponent:fileName];
    NSData *data = [[NSMutableData alloc]initWithContentsOfFile:[directoryContent objectAtIndex:0]];
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
    NSDictionary *dict = [unarchiver decodeObjectForKey: DATA];
    [unarchiver finishDecoding];

    return dict;
}
else
    return nil;
}

Мое приложение позволяет пользователю перемещать несколько представлений, и я просто пытаюсь найти простой способ хранения кадров и преобразований представлений без необходимости извлекать каждое значение типа int / string. Я также надеялся, что мне не придется разбивать мой UIImage на байтовый массив, а затем перезагружать его обратно в UIImage.

Я делаю сумасшедшие вещи здесь, надеясь на функциональность, которая невозможна?

Является ли мой единственный вариант разбивать каждый UIView в массиве на отдельные значения для преобразований, фреймов и т. Д.?

Мысли

1 Ответ

2 голосов
/ 06 ноября 2011

Есть ли в каталоге документов что-то кроме вашего файла данных?(Я считаю, что он всегда содержит хотя бы подкаталог с именем «Входящие».) Я заметил эти строки в вашем loadData методе:

    path = [path stringByAppendingPathComponent:fileName];
    NSData *data = [[NSMutableData alloc]initWithContentsOfFile:[directoryContent objectAtIndex:0]];

Вы добавляете fileName к path, но затемне используйте это.Вы только что прочитали из первого файла, упомянутого в directoryContent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...