Как сделать дамп текущего состояния NSUserDefaults standardUserDefaults на диск и прочитать обратно? - PullRequest
3 голосов
/ 27 мая 2010

Я хочу иметь какой-либо способ резервного копирования пользовательских значений по умолчанию для списка свойств или XML, или другого подходящего формата файла, который можно передавать по сети. Как я могу получить их резервную копию, чтобы я мог отправить их на веб-сервер и получить их обратно на устройство и прочитать их в базе данных по умолчанию пользователя?

Ответы [ 2 ]

5 голосов
/ 27 мая 2010

Вы можете получить JSON-строку с пользовательскими значениями по умолчанию, например:

// You will need this at the top of your file
#import "CJSONSerializer.h"


// Get a dictionary of the user defaults
NSDictionary *dict = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];

// Convert them to JSON
NSString *json = [[CJSONSerializer serializer] serializeObject:dictionary];

и для считывания их обратно в устройство вы можете просто сделать наоборот:

// You will need this at the top of your file
#import "CJSONDeserializer.h"

// Get the data from the server and re-create the dictionary from it
NSData *jsonData = <YOUR DATA FROM THE SERVER>;
NSDictionary *dict = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:nil];

// Put each key into NSUserDefaults
for (id key in [dict allKeys]) {
    id object = [dict objectforKey:key];
    [NSUserDefaults standardUserDefaults] setObject:object forKey:key];
}
[[NSUserDefaults standardUserDefaults] synchronize];

Посетите страницу проекта TouchJSON для получения более подробной информации и ссылки для скачивания.

Надеюсь, это поможет.

NB В приведенном выше коде нет проверки ошибок - вы можете столкнуться с проблемами, если ваш JSON содержит int / float / etc, потому что setObject: forKey: завершится неудачей.

0 голосов
/ 27 мая 2010

Я бы предложил либо XML, либо JSON. Оба имеют довольно хорошие фреймворки, с которыми легко работать (TouchXML и TouchJSON).

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