Как сохранить / загрузить NSUserDefaults для целей резервного копирования? - PullRequest
0 голосов
/ 21 декабря 2011

Корректен ли этот код для загрузки и сохранения NSUserDefaults.

// Load
    NSDictionary *dict = [[NSUserDefaults standardUserDefaults] 
         dictionaryRepresentation];

// Save
    NSDictionary *dict =  ....
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults registerDefaults:dict];
    [defaults synchronize]; << Not sure if this is needed

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

Ответы [ 2 ]

1 голос
/ 21 декабря 2011

Ваш код Load даст вам словарь всех текущих значений по умолчанию.

[ Примечание Вероятно, это будет намного больше, чем вы ожидаете, так как Mac OS устанавливает множество значений по умолчанию, возможно, вы захотите уменьшить его.Например, вы можете ограничить словарь только теми значениями по умолчанию в вашем домене , которые отличаются от их зарегистрированным значением по умолчанию, используя:

NSDictionary *userDefaults = [[NSUserDefaults standardUserDefaults] persistentDomainForName:@"<your bundle identifier>"];

примечание конца ]

Ваш код сохранения , вероятно, не выполняет то, что вы ожидаете, он устанавливает значения, которые вы восстанавливаете, как значения по умолчанию для этих ключей - так что если вы поддерживаете «Восстановить настройки по умолчанию»", или что-то подобное, то это те значения, которые в результате.Что вы, вероятно, хотите сделать, это установить текущее значение клавиш, это можно сделать с помощью простого цикла:

NSDictionary *dict =  ....
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
foreach(id key in dict)
   [defaults setObject:[dict objectForKey:key] forKey:key];

Приведенный выше код является только наброском, вам может понадобитьсяпозаботиться о том, какие настройки вы сохраняете / восстанавливаете и в каком порядке - но все это зависит от вашего приложения.

0 голосов
/ 21 декабря 2011
// Get

NSDictionary *dict = [[NSUserDefaults standardUserDefaults] objectForKey:@"myDictionary"];

// Set

NSDictionary *dict = ...

[[NSUserDefaults standardUserDefaults] setObject:dict forKey:@"myDictionary"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...