Сохранять данные между представлениями - PullRequest
0 голосов
/ 21 августа 2011

Я разрабатываю приложение, в котором пользователь вводит поисковое слово и получает результаты от веб-службы (я контролирую веб-службу).Результаты отображаются в удобном виде, а затем пользователь может выбрать строку и перейти к трех-четырем уровням внутренних деталей (я использую элемент управления навигацией).сохранить данные между представлениями.

В настоящее время я использую делегат приложения для хранения массива объектов, к которым я могу получить доступ из любого места в приложении.Это работает нормально, но я прочитал, что это не очень хорошая практика для работы (меня беспокоят проблемы с памятью).Я попытался использовать Core Data Framework для этой работы, но потом понял, что мне придется читать результаты моих веб-сервисов и последовательно их зацикливать, чтобы вставить в базу данных.Мне также придется удалить старые данные, потому что сохраняемые данные актуальны только для текущего поиска.Я читал о p-списках и сохранении данных в файловой системе, но не смог найти действительно хорошего решения для моей работы ... Любая помощь будет оценена !!!Спасибо !!!

1 Ответ

0 голосов
/ 22 августа 2011

Вы можете использовать JSON или PLISt для связи, хотя двоичный plist - по мнению Apple - намного быстрее на стороне телефона.

Создать словарь из двоичного Plist относительно просто:

NSPropertyListFormat format;
NSDictionary *myDictionary = [NSPropertyListSerialization 
        propertyListFromData:data mutabilityOption:NSPropertyListMutableContainers
        format:&format errorDescription:&errorString];

Для его создания из JSON требуется только одна из доступных библиотек JSON. Когда у вас есть словарь, сохраните его:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                     NSUserDomainMask, YES); 
NSString *file = [NSString stringWithFormat: @"%@%@.plist", [paths objectAtIndex:0], @"MyPlistBaseName"];    

[plist writeToFile: file atomically:NO];

И перезагрузите его позже:

NSDictionary *plist = [[[NSDictionary alloc] initWithContentsOfFile: file] autorelease];

Однако, если вы инкапсулируете доступ к этим данным в одноэлементном режиме, вы можете беспокоиться об оптимизации реализации, если скорость / память становятся проблемой. Просто используйте этот признак как «владельца» данных с помощью таких методов, как count, getGroup(0) (чтобы вернуть блок 25) и т. Д. Затем вы можете скрыть все детали реализации внутри объекта.

...