28

我在应用程序的设置包中定义了一个多值设置(位置)。
Titles 定义为长标题,例如“London”,设置的对应值部分定义为“1”。

[编辑]

为了扩展这个问题,我将添加有关多值设置的更多信息:

这是多值设置的截图

如何在第 0 项中检索 LONDON 的标题。如上所述,当我检索 objectForKey 或 valueForKey 时,我总是得到 1。我想在应用程序的标签中显示标题中的字符串“LONDON”,但在核心数据中使用值 1。注意:我已经在应用程序运行之前在设置中设置了值,因此它确实返回了一个值,但该值始终为 1,因为标题似乎不可访问。

4

4 回答 4

12

您应该将您的“默认值”值设置为“1” - 只是“值”列表中的第 0 项。

于 2013-07-25T15:24:20.867 回答
6

I ran into the similar situation and answering the question that it'll help someone.

If I understand the question correctly, when user selects London from the settings the default value will be 1. when you read the settings bundle for locationSetting you get the value 1 and not LONDON, but you want the "LONDON" in your code rather than 1. It is not possible with the current structure of your plist. make the default value a dictionary instead of string and then you can have both titles and values inside that dictionary. you can then retrieve the text of the selected value.

于 2017-03-29T14:14:33.363 回答
2

位置设置为多值,是一个NSDictionary。因此,请执行以下操作:

NSDictionary *location = [[NSUserDefaults standardUserDefaults] valueForKey:@"locationSettings"]; 

NSString *value = (NSString *)location; 

将位置值转换为 NSString,因为您知道要返回一个字符串。

然后,您可以将结果作为字符串处理。返回的“值”变量是值部分中写入的任何内容。在您的情况下,如果您选择“London”,您将以字符串的形式返回值“1”。

于 2015-02-19T19:52:40.797 回答
0

如果我对您的问题的理解是正确的,那么您是在问如何获取用户选择的值的位置字典的 Key 条目。

对于字典,没有这样的一次性方法。但是有一种方法可以通过allKeys如下操作来达到相同的结果:

NSDictionary *location = [[NSUserDefaults standardUserDefaults] valueForKey:@"locationSettings"]; 
NSArray *keys = [location allKeys];
NSString *locationIdentifier = [keys objectForIndex:[location valueForKey:@"LONDON"]];

这将导致"LONDON"字符串存储在locationIdentifier变量中。所以最后一行,字符串的分配,可能会改为简单地拥有objectForIndex:0,但这不是我以前尝试过的,所以我不确定。

于 2016-08-17T10:14:39.840 回答