获取ios多值用户首选项

时间:2012-09-06 16:17:36

标签: settings.bundle

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

  • 类型:PSMultiValueSpecifier
  • 标题:Abcdefg
  • Key:abcdefg
  • DefaultValue: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 个答案:

答案 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}];
}