【问题标题】:How to create an NSDictionary with two values per key from plist如何从 plist 创建一个每个键有两个值的 NSDictionary
【发布时间】:2010-07-22 14:17:49
【问题描述】:

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

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

【问题讨论】:

  • 你可以连接两个字符串并在中间插入一个“_”?

标签: iphone xcode nsdictionary uipickerview


【解决方案1】:

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

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

plist 只是一个(集合)序列化格式。我不明白它是如何被打败的。


要存储 key-value-value,您有 2 个选择。

(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。
  • 缺点 — 数组和字典过于灵活。

【讨论】:

  • 我想我喜欢使用NSArray 作为值的想法。我需要一些时间来弄清楚如何让两个值中的第一个(NSString)成为第二个选择器组件,不过……谢谢,敬请期待。
  • 我决定为我的数据使用一个对象。它被称为基于 NSOBject 的化学,我有四个属性,2 个字符串,1 个浮点数和一个 BOOL。现在的诀窍是用化学品加载字典。不确定我的代码中的哪个位置是正确的......
【解决方案2】:

你说你的值是一个字符串数组对吗?

所以你可以将数字常量转换为字符串

[NSString stringWithFormat:@"%d"numericConstant]

并将其添加到数组中。

从字典中获取时将其转换回 int

[stringConstant intValue]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 2012-03-05
    相关资源
    最近更新 更多