Итерации с использованием правильного метода integerForKey, objectForKey для NSUserDefaults для резервного копирования в БД? - PullRequest
0 голосов
/ 20 декабря 2011

Я хочу сбросить все данные NSUserDefaults, используемые в моем приложении, в базу данных m.

Почему?Потому что я создаю функцию резервного копирования / восстановления, где я только создаю резервную копию файла базы данных.Таким образом, я могу сохранить все настройки в моей базе данных.Я думаю, мне нужно будет делать это построчно, используя запросы на вставку.

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

Моя проблема, если это нормально, когда я сохраняю в NSUserDefaults, я бы использовал setInteger, setObject, но как я могу определить, чтоиспользовать в цикле.

Я знаю, что могу повторять вот так ...

NSUserDefaults * defs = [NSUserDefaults standardUserDefaults];
NSDictionary * dict = [defs dictionaryRepresentation];
for (id key in dict) {
    [defs removeObjectForKey:key];
}
[defs synchronize];

Я не хочу делать вызов для каждого из моих ключей.

РЕДАКТИРОВАТЬ

Я нашел это, которое я мог бы использовать для дампа одной записи в моей БД, но я не уверен, как передать ее обратно?

NSDictionary *bundleInfo = [[NSBundle mainBundle] infoDictionary];
  NSString *bundleId = [bundleInfo objectForKey: @"CFBundleIdentifier"];

  NSUserDefaults *appUserDefaults = [[NSUserDefaults alloc] init];
  NSLog(@"Start dumping userDefaults for %@", bundleId);
  NSLog(@"userDefaults dump: %@", [appUserDefaults persistentDomainForName: 
         bundleId]);
  NSLog(@"Finished dumping userDefaults for %@", bundleId);
  [appUserDefaults release];

1 Ответ

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

Как вы описываете, вы можете создать словарь с настройками вашего приложения, используя -persistentDomainForName.Тогда у вас есть простой NSDictionary.

. Вы можете создать строку из словаря, преобразовав ее в XML-представление списка свойств:

NSData *data = [NSPropertyListSerialization dataWithPropertyList: dict format: NSPropertyListXMLFormat_v1_0 options: 0 error: nil];
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

Вы можете сохранить ее в своемDB.(Вы также можете просто сохранить данные немедленно)

Затем вы можете использовать -propertyListWithData:options:format:error:, чтобы преобразовать его обратно в NSDictionary:

NSString *data = [string dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dict = [NSPropertyListSerialization propertyListWithData: data options: 0 format: NSPropertyListXMLFormat_v1_0 error: nil];

Затем просто переберите все ключи в этом словареи используйте -setObject:forKey, чтобы записать эти элементы обратно в пользовательские настройки по умолчанию.

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