如何使用plist为每个键创建一个带有两个值的NSDictionary

时间:2010-07-22 14:17:50

标签: iphone xcode nsdictionary uipickerview

我有一个从属UIPicker,它将值从plist加载到它的两个组件中。它是一个NSDictionary,其中包含NSArrays个字符串。用户选择一对组件,选择器将这两个字符串发送回委托。我真正需要的是一个与每个人选择一致的常数。例如,第一个组件是A,B,C,每个选项有三个子选项A1,A2,A3等...用户选择ChoiceA和ChoiceA3,选择器返回两个字符串,但是我有一个关联的数字常量使用A-A3,这就是我在程序中实际需要的数学。

我可以将两个与特定键关联的内容 - 字符串和数字?我想我想要的是一个键值对(三元组)?似乎在我的程序中使用逻辑来根据返回的键值对分配一个值,从而破坏了首先使用plist的目的。

2 个答案:

答案 0 :(得分:1)

理想的结构实际上是有一本字典词典。

A = {
  A1 = 36;
  A2 = 42;
  A3 = 89;
};
B = {
  B1 = 64;
  ...

plist只是(序列化)格式的集合。我不知道它是如何被击败的。


要存储键值,您有两个选择。

(1)创建一个新类。

@interface StringNumberPair : NSObject {
  NSString* strval;
  int intval;
}
@property(copy) NSString* strval;
@property(assign) int intval;
-(id)initWithString:(NSString*)strval_ integer:(int)intval_;
@end
...

[theDict setObject:[[[StringNumberPair alloc] initWithString:@"string"
                                                     integer:42] autorelease]
            forKey:@"key"];
  • Pro - 清除界面。
  • 缺点 - 您需要编写大量代码。

(2)将值设为数组:

[theDict setObject:[NSArray arrayWithObjects:
                            @"string", [NSNumber numberWithInt:42], nil]
            forKey:@"key"];

或字典:

[theDict setObject:[NSDictionary dictionaryWithObjectsAndKeys:
                      @"string",                   @"strval",
                      [NSNumber numberWithInt:42], @"intval",
                      nil]
            forKey:@"key"];
  • Pro - 这些是存储结构化值的标准类型。它很容易序列化为plist。
  • 缺点 - 数组和字典太灵活了。

答案 1 :(得分:0)

你说你的值是一串字符串吗?

因此您可以将数字常量转换为字符串

[NSString stringWithFormat:@"%d"numericConstant]

并将其添加到数组中。

从词典

获取时将其转换回int
[stringConstant intValue]