有没有人知道通过NSLog转储NSUserDefaults的standardUserDefaults的快速方法?这就是我所拥有的:
NSLog(@"NSUserDefaults dump: %@", [NSUserDefaults standardUserDefaults]);
但它返回:
NSUserDefaults dump: <NSUserDefaults: 0x50b520>
......这不是我想要的。我真的很想拥有键值对。
非常感谢任何帮助或正确方向的观点。干杯!
答案 0 :(得分:37)
NSLog(@"NSUserDefaults dump: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
答案 1 :(得分:18)
感谢我的商业伙伴和朋友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];
正如您所看到的,每个回答问题的人都在正确的轨道上,但没有提供任何代码的解决方案 - 直到Don在源代码管理中编辑我们的代码。谢谢大家!
答案 2 :(得分:10)
尝试:
NSLog(@"NSUserDefaults dump: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
dictionaryRepresentation返回默认值的NSDictionary表示。
答案 3 :(得分:8)
NSLog(@"%@ defaults = %@", [self class],
[[NSUserDefaults standardUserDefaults]
persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]]);
答案 4 :(得分:6)
默认情况下,共享的NSUserDefaults初始化为三个搜索域(如果需要,还可以添加其他搜索域):app参数,app首选项(存储在应用程序plist中的内容)和本地化系统首选项。最后一个是为什么你会看到那些不熟悉的Apple键,但你真的不必担心“覆盖”它们。如果您使用相同的密钥名称,它只会将该值放在应用程序首选项域中。在系统首选项之前搜索您应用的首选项,这样您就可以获得相同的值,但不会影响其他任何值。
如果您确实只想要应用程序的首选项,则可以删除其他搜索域(您需要的特定名称位于文档中)。
答案 5 :(得分:1)
这是一个方便的类,你可以用它来转储所有类型的垃圾:
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);