我尝试使用“设置包”检索“设置应用程序”中选择的值。该字段是“PSMultiValueSpecifier”。在“Root.plist”中,我实现了:
值(数组):
Item 0: aaa
Item 1: bbb
标题(数组):
Item 0: A
Item 1: B
而且,在我写的实现文件中:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *string = [defaults objectForKey:@"abcdefg"];
但“字符串”为空。当我使用用户默认类型执行相同操作时:“PSTextFieldSpecifier”我可以检索该值。
我按照“Apress - 开始iOS 5开发:探索iOS SDK”一书中的说明进行操作,但我无法检索所选的值。
说明与“Apple开发帮助”相同。
我不明白是什么问题。这似乎很容易。
答案 0 :(得分:2)
我找到了这个错误。
如果您在“Settings.bundle”(具有“默认值”)中实施“多值”用户首选项,但从不进入设置iPhone模拟器并且永远不会更改多值首选项,则句子:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *string = [defaults objectForKey:@"key"];
返回“nil”值。不可思议,我失去了一周试图找到问题!!!!
但我怀疑:
如果我实施“多值”用户首选项并在iTunes Store中发布应用程序,但是用户不使用此“多值”用户首选项,“NSUserDefaults”将返回nill值?
我是否必须考虑接收空值的可能性?
真的,我认为这很荒谬。
答案 1 :(得分:1)
DefaultValue
似乎仅在官方设置应用中使用。显然,您必须通过以下方式注册默认值:1)测试您的一个设置以查看它是否为NULL,然后2)迭代设置,抓取并设置默认值:
sample Obj-C code for this by just.do.it
documentation on PSMultiValueSpecifier在这里似乎有些不足。对此的困惑表现在SO和网络上。例如:
答案 2 :(得分:1)
不,我认为你需要注册你的默认值,例如:
-(BOOL) application: (UIApplication*) application didFinishLaunchingWithOptions: (NSDictionary*) launchOptions
{
NSDictionary* defaults = @{@"key": @"default value"};
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}
这是因为应用程序对它包含的设置包一无所知。书籍Beginning iOS6 Development: Exploring the iOS SDK
的第430页对此有清楚的解释。
答案 3 :(得分:0)
如果返回的对象为nil,则设置默认值。
NSString * key = @"the key";
NSUserDefaults * uD = [NSUserDefaults standardUserDefaults];
NSString * stringValue = [uD objectForKey:key];
if (!stringValue) {
stringValue = @"the default value";
[uD registerDefaults:@{key: stringValue}];
}