2010-11-02 3 views
19

Я хотел бы сериализовать кучу данных и сохранить их в файле, а затем загрузить его (естественно) и воспроизвести с помощью функции, которую я написал. (Извините, если моя терминология отключена, я начинаю с такого рода вещами.) Каков наилучший способ сделать это с iOS? Глядя на документации здесь:Каковы варианты сохранения данных в iOS?

Standard Application Behaviors Guide

Я понял, что я должен использовать NSSearchPathForDirectoriesInDomains для нахождения корня каталога соответствующего хранения (документов?), А затем использовать NSData для хранения этих буферов данных, я создаю и записывать их в файл. Я нахожусь с этим, или я ошибаюсь? Любой другой совет мудреца?

+4

ответ на этот вопрос? – golddove

ответ

1

Да, довольно правильное направление. Вам необходимо реализовать что-то, что называется протоколом NSCoding на вашем объекте, чтобы иметь возможность архивировать &, чтобы развернуть его в NSData. См. Пример: Saving files on iOS using NSFileManager

18

Вы можете использовать plist.
Очень просто сохранить список строк или других данных без использования основных данных.
См Property List Programming Guide

Например, этот код будет сохранить объект (rootObj), который может быть массивом или словарь:

NSString *error; 
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *plistPath = [rootPath stringByAppendingPathComponent:@"yourFile.plist"]; 
NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:rootObj 
                   format:NSPropertyListXMLFormat_v1_0 
                errorDescription:&error]; 
if(plistData) { 
    [plistData writeToFile:plistPath atomically:YES]; 
} 
else { 
    NSLog(@"Error : %@",error); 
    [error release]; 
} 

Существуют некоторое ограничение на поддерживаемом классе (смотрите руководство)

+4

dataFromPropertyList устарел. – Jackson

+0

Ошибка: ARC запрещает явное сообщение отправки 'release' – Kamal

13

Это зависит от данных, которые вы пишете. Если вы в основном хотите сериализовать объекты, см. Протокол NSCoding. Если у вас есть простая структура данных, которая не является классом, вы можете сохранить ее в NSDictionary и сохранить ее в plist. И если у вас большой кусок данных (например, тысячи поплавков или что-то в этом роде), вы можете сохранить это с помощью NSData, как вы уже намекали. В любом случае обязательно прочтите Archives and Serializations Programming Guide, чтобы вы не изобретали велосипед.

Смежные вопросы