Подтвердить что ты не робот

NSUserDefaults: сброс структуры NSUserDefaults standardUserDefaults

Кто-нибудь знает быстрый способ сбросить стандартныеUserDefaults NSUserDefaults через NSLog? Это то, что у меня есть:

NSLog(@"NSUserDefaults dump: %@", [NSUserDefaults standardUserDefaults]);

Но он возвращает:

NSUserDefaults dump: <NSUserDefaults: 0x50b520>

... это не совсем то, что я ищу. Мне бы очень хотелось иметь пары ключ-значение.

Приветствуется любая помощь или точка в правильном направлении. Ура!

4b9b3361

Ответ 1

Спасибо Дону МакКогей, моему деловому партнеру и другу, за то, что он исправил мой код для меня и дал краткий ответ. Чтобы поделиться им с остальными из вас, это фрагмент кода:

  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];

Как вы можете видеть, все, кто отвечал на вопрос, были на правильном пути, но ни один предлагаемый код не был решением - пока Дон не редактировал наш код в исходном контроле. Спасибо всем!

Ответ 2

NSLog(@"NSUserDefaults dump: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);

Ответ 3

Try:

NSLog(@"NSUserDefaults dump: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);

dictionaryRepresentation возвращает представление NSDictionary значений по умолчанию.

Ответ 4

NSLog(@"%@ defaults = %@", [self class], 
  [[NSUserDefaults standardUserDefaults] 
   persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]]);

Ответ 5

Общие NSUserDefaults инициализируются тремя доменами поиска по умолчанию (вы также можете добавить другие): аргументы приложения, настройки приложения (что хранится в области приложения) и локализованные системные настройки. Последний из них - это то, почему вы видите эти незнакомые клавиши Apple, но вам не нужно беспокоиться о "переписывании" их. Если вы используете одно и то же имя ключа, оно просто поместит это значение в домен предпочтений приложения. Настройки вашего приложения выполняются перед настройками системы, поэтому вы получите одно и то же значение обратно, но это ничего не повлияет.

Если вам действительно нужны только настройки вашего приложения, вы можете удалить другие поисковые домены (конкретные имена вам нужны в документах).

Ответ 6

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

https://github.com/VTPG/CommonCode/blob/master/VTPG_Common.h

Чтобы использовать его, добавьте заголовок в свой "m"

#import "VTPG_Common.h"

то в любом месте вашего класса вызовите LOG_EXPR (foo):

NSUserDefaults *userDefaults = [[NSUserDefaults alloc] init];
[userDefaults addSuiteNamed:@"com.apple.spaces"];
NSDictionary *foo = [userDefaults dictionaryForKey:@"SpacesDisplayConfiguration"];
LOG_EXPR(foo);