NSUserDefaults: сброс структуры NSUserDefaults standardUserDefaults
Кто-нибудь знает быстрый способ сбросить стандартныеUserDefaults NSUserDefaults через NSLog? Это то, что у меня есть:
NSLog(@"NSUserDefaults dump: %@", [NSUserDefaults standardUserDefaults]);
Но он возвращает:
NSUserDefaults dump: <NSUserDefaults: 0x50b520>
... это не совсем то, что я ищу. Мне бы очень хотелось иметь пары ключ-значение.
Приветствуется любая помощь или точка в правильном направлении. Ура!
Ответы
Ответ 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);