2

我尝试使用“设置包”检索在设置应用程序中选择的值。该字段是“PSMultiValueSpecifier”。在“Root.plist”中,我实现了:

  • 类型:PSMultiValueSpecifier
  • 标题: Abcdefg
  • 键:abcdefg
  • 默认值:aaa
  • 值(数组):

     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 开发帮助”相同。

我不明白是什么问题。这似乎很容易。

4

4 回答 4

2

我发现了这个错误。

如果您在“Settings.bundle”(使用其“默认值”)中实现“多值”用户首选项,但从不进入设置 iPhone 模拟器并且从不更改多值首选项,则语句:

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *string = [defaults objectForKey:@"key"];

返回一个“零”值。难以置信,我花了一周的时间试图找到问题!!!!

但我有一个疑问:

如果我实施“多值”用户首选项并在 iTunes Store 中发布应用程序,但用户不使用此“多值”用户首选项,“NSUserDefaults”将返回零值?

我是否必须考虑收到空值的可能性?

真的,我觉得这很荒谬。

于 2012-09-07T08:00:17.080 回答
1

不,我认为您需要注册您的默认值,例如:

 -(BOOL) application: (UIApplication*) application didFinishLaunchingWithOptions: (NSDictionary*) launchOptions
{

     NSDictionary* defaults = @{@"key": @"default value"};
     [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}

这是因为应用程序对其包含的设置包一无所知。书的第430页Beginning iOS6 Development: Exploring the iOS SDK对此有明确的解释。

于 2013-05-20T14:48:25.040 回答
1

似乎DefaultValue仅在官方设置应用程序中使用。显然,您必须通过以下方式注册默认值:1)测试您的一项设置以查看它是否为 NULL,然后 2)遍历设置,获取并设置默认值:

示例 Obj-C 代码just.do.it

PSMultiValueSpecifier上的文档在这里似乎有缺陷。对此的困惑出现在 SO 和网络上。例如:

于 2013-03-05T21:11:22.980 回答
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}];
}
于 2015-08-04T08:03:57.160 回答