有人知道通过NSLog快速转储NSUserDefaults的standardUserDefaults吗?这是我的代码:
NSLog(@"NSUserDefaults dump: %@", [NSUserDefaults standardUserDefaults]);
但它返回:
NSUserDefaults dump: <NSUserDefaults: 0x50b520>
......这不是我要找的。我真的想要键值对。
任何帮助或指引都将不胜感激。谢谢!
有人知道通过NSLog快速转储NSUserDefaults的standardUserDefaults吗?这是我的代码:
NSLog(@"NSUserDefaults dump: %@", [NSUserDefaults standardUserDefaults]);
但它返回:
NSUserDefaults dump: <NSUserDefaults: 0x50b520>
......这不是我要找的。我真的想要键值对。
任何帮助或指引都将不胜感激。谢谢!
NSLog(@"NSUserDefaults dump: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
感谢我的商业伙伴和朋友 Don McCaughey,为我修复了代码并提供了简洁明了的答案。以下是一个代码片段,与大家分享:
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];
正如你所看到的,每个回答问题的人都走在正确的轨道上,但是没有任何代码能够解决问题 - 直到唐在源代码控制中编辑了我们的代码。感谢大家!
尝试:
NSLog(@"NSUserDefaults dump: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
dictionaryRepresentation方法返回默认设置的NSDictionary表示。
NSLog(@"%@ defaults = %@", [self class],
[[NSUserDefaults standardUserDefaults]
persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]]);
共享的NSUserDefaults默认使用三个搜索域进行初始化(如果需要,您也可以添加其他搜索域):应用程序参数、应用程序首选项(存储在应用程序 plist 中的内容)和本地化系统首选项。最后一个是为什么您会看到那些陌生的苹果键,但您真的不必担心“覆盖”它们。如果您使用相同的键名,它只会将该值放入应用程序首选项域中。应用程序的首选项会在系统首选项之前搜索,因此您将得到相同的值,但不会影响其他任何内容。
如果您确实只想要您的应用程序首选项,您可以删除其他搜索域(具体名称可以在文档中找到)。
这里有一个方便的类,可以用来转储各种东西:
https://github.com/VTPG/CommonCode/blob/master/VTPG_Common.h
要使用它,将标题添加到您的“m”中。保留HTML,不要解释。#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);