сохранение объекта JSON в iOS - PullRequest
1 голос
/ 18 апреля 2011

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

Я думаю, что я должен использовать протокол NSCoding и архивировать примерно так:

// alloc nsdata obj
NSMutableData *data = [[[NSMutableData alloc] init] autorelease];

// create archiver
NSKeyedArchiver *archiver = [[[NSKeyedArchiver alloc] initForWritingWithMutableData:data] autorelease];  

// archive whiteboard
[archiver encodeObject:mSaveData forKey:@"Data"];
[archiver finishEncoding];
[data writeToFile:dataPath atomically:YES];

но есть ли простой способ кодировать этот объект JSON, который действительно является NSArray из NSDictionaries, или мне нужно тщательно кодировать каждое поле в этом объекте?

Может быть, есть и более простой способ, например, сохранение самого объекта json в виде строки (до его анализа с помощью метода objectWithData) и повторный анализ его каждый раз, когда приложение загружается и хочет использовать локальную копию? *

Ответы [ 2 ]

2 голосов
/ 18 апреля 2011

Поскольку данные, которые вы хотите сохранить, - это просто NSArrays, NSDictionaries и предположительно такие вещи, как NSStrings и NSNumbers, я не понимаю, почему вам нужно «тщательно кодировать каждое поле». То, как вы это сделали с NSKeyedArchiver, действительно, и вам не нужно больше кода для сохранения. Некоторые другие варианты:

  • Использование +[NSKeyedArchiver archiveRootObject:toFile:].
  • Используйте SBJSON, чтобы преобразовать данные обратно в JSON и сохранить строку JSON в виде данных UTF-8.
  • Сохраните его как список, используя +[NSPropertyListSerialization dataFromPropertyList:format:errorDescription:].
0 голосов
/ 19 апреля 2011

AsiHTTP позволяет вам кэшировать ваши запросы. Он реализует функции, которые вам нужны

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