NSUserDefaults: вывод структуры стандартного NSUserDefaultsUserDefaults - PullRequest
17 голосов
/ 01 мая 2009

Кто-нибудь знает о быстром способе сброса стандартных пользовательских настроек NSUserDefaults через NSLog? Вот что у меня есть:

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

Но возвращается:

NSUserDefaults dump: <NSUserDefaults: 0x50b520>

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

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

Ответы [ 6 ]

37 голосов
/ 01 мая 2009
NSLog(@"NSUserDefaults dump: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
18 голосов
/ 05 мая 2009

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

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

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

10 голосов
/ 01 мая 2009

Попробуйте:

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

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

8 голосов
/ 25 сентября 2009
NSLog(@"%@ defaults = %@", [self class], 
  [[NSUserDefaults standardUserDefaults] 
   persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]]);
6 голосов
/ 01 мая 2009

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

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

1 голос
/ 27 февраля 2014

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

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...