Хранение и извлечение кэшированных данных из веб-службы JSON в iPhone

Я хочу создать класс Cache Manager для новостей, который также можно использовать в других проектах iPhone. Мой диспетчер кеша будет поддерживать кэширование данных JSON, т.е. текста и изображения, и хранить их локально на iPhone. Основная идея этого заключается в том, чтобы позволить приложению получить доступ к кэшированным данным, что приведет к снижению сетевой активности.

Я думаю реализовать эту вещь следующими способами:

  1. База данных Sqlite, т.е. извлечение всех данных и сохранение

  2. Добавление этих данных в некоторый файл .plist

  3. Базовые данные

Я попытался использовать этот код для второго решения:

NSString *plistPath = [self Return_PlistPathCreation]; // Method to creat the JSON file locaally under Documents

    NSMutableDictionary *dict = [[NSMutableDictionary alloc]init];
    [dict setValue:newsArray forKey:@"homenews"]; //newsArray is the array containing objects parsed from the JSON webservice 
     NSLog(@"JSON representation for dictionary is %@",[dict JSONRepresentation]); //it prints perfectly

    [[dict JSONRepresentation] writeToFile:plistPath atomically:YES encoding:NSASCIIStringEncoding error:nil]; //Not not able to write it within the file 

Что не так с приведенным выше кодом?

Итак, какой из них лучше всего подходит для хранения кэшированных данных с точки зрения производительности и скорости отклика приложения? Хотя я открыт для новых идей, есть ли какие-либо другие способы, кроме указанных выше?


person Ajay Sharma    schedule 01.02.2012    source источник


Ответы (3)


Самым лучшим, более функциональным и простым в реализации решением является третье, Core-Data. Если вы хотите получить наиболее универсальное приложение с точки зрения разработки новых функций в будущем, мой совет: спроектировать приложение на основе этой архитектурной парадигмы:

  1. Определите базу данных и доступ к Core-Data с управляемыми объектами для контента, который вы собираетесь загрузить. Эта база данных является не только кешем, но и основными данными вашего приложения.

  2. Создайте свое приложение на основе этой базы данных основных данных и получите доступ к данным во всех ваших контроллерах представления, которые вы можете, через UIFetchedResultsController. Реализуйте простое обновление представлений на основе методов делегата fetchedViewController.

  3. Создавайте фоновые функции, независимые от остальной части приложения, которые загружают содержимое из Интернета и сохраняют его в Core-Data. Представления будут обновляться автоматически без дополнительных усилий со стороны разработчика.

Я надеюсь, что это полезно для вас

person Gabriel    schedule 01.02.2012
comment
И как насчет изображений, как мне записать/сохранить их в Core Data? - person Ajay Sharma; 01.02.2012
comment
Я сохраняю изображения не в основных данных, а в файловой системе. В основных данных у меня есть только ссылка на файл. Если вы разрабатываете дисциплинированно и каждый раз, когда вы удаляете объект основных данных, указывающий на файл изображения, вы удаляете этот файл, вам не придется выполнять какую-либо сложную работу. Кстати, я не использую оригинальные имена файлов в каталоге кеша, чтобы избежать дублирования имен. Окончательное имя файла представляет собой строку в основном объекте данных. - person Gabriel; 01.02.2012
comment
О, я забыл вам кое-что сказать, не используйте каталог кэша по умолчанию, который iOS предлагает для вашего приложения. Вы собираетесь управлять папкой с файлами, поэтому используйте папку «Документы». Папка кэша предназначена для непостоянных файлов, и вам нужно, чтобы они были там, если на них указывают основные объекты данных. - person Gabriel; 01.02.2012
comment
эй, вы должны увидеть любой хороший учебник по основным данным или тому, что вы хотите объяснить мне. Поскольку я новичок в основных данных. Спасибо - person Ajay Sharma; 01.02.2012

Вместо того, чтобы создавать это самостоятельно, потому что это очень сложная проблема, почему бы просто не использовать что-то вроде RestKit?

person wattson12    schedule 01.02.2012

Как я узнал из Standford Uni. Видеолекции CS193p, вы почти никогда не должны использовать SQLite в своих приложениях. Основные данные немного сложны, но если ваши данные имеют сложный график, это будет лучше. Я думаю, что использование списка свойств (plist) будет лучше :)

Примечание. Я использовал NSUserDefaults для сохранения данных JSON и последующего использования в других классах, также есть методы кэширования в эта ссылка.

person ilhan çetin    schedule 01.02.2012
comment
а также есть много библиотек, как упомянул @ wattson12, например, RestKit - person ilhan çetin; 01.02.2012