0

好的,我有一个这样的 plist

`
<dict>
<key>Rows</key>
<array>
    <dict>
        <key>WireSize</key>
        <string>16 AWG</string>
        <key>Children</key>
        <array>
            <dict>
                <key>Cooper 60°C (140°F)</key>
                <string>0</string>
            </dict>
            <dict>
                <key>Cooper 75°C (167°F)</key>
                <string>0</string>
            </dict>
            <dict>
                <key>Cooper 90°C (194°F)</key>
                <string>14</string>
            </dict>
            <dict>
                <key>Aluminum 60°C (140°F)</key>
                <string>0</string>
            </dict>
            <dict>
                <key>Aluminum 75°C (167°F)</key>
                <string>0</string>
            </dict>
            <dict>
                <key>Aluminum 90°C (194°F)</key>
                <string>0</string>
            </dict>
        </array>
    </dict>
    <dict>
        <key>WireSize</key>
        <string>16 AWG</string>
        <key>Children</key>
        <array>
            <dict>
                <key>Cooper 60°C (140°F)</key>
                <string>0</string>
            </dict>
            <dict>
                <key>Cooper 75°C (167°F)</key>
                <string>0</string>
            </dict>
            <dict>
                <key>Cooper 90°C (194°F)</key>
                <string>14</string>
            </dict>
            <dict>
                <key>Aluminum 60°C (140°F)</key>
                <string>0</string>
            </dict>
            <dict>
                <key>Aluminum 75°C (167°F)</key>
                <string>0</string>
            </dict>
            <dict>
                <key>Aluminum 90°C (194°F)</key>
                <string>0</string>
            </dict>
        </array>
    </dict>

</array>

`

并试图从中读取值但没有成功

我正在使用此代码

enter NSBundle *bundle = [NSBundle mainBundle];
NSString *plistPath = [bundle pathForResource:@"Table 310-16" ofType:@"plist"];
NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:plistPath];

for (id key in dictionary) {
    NSArray *array = [dictionary objectForKey:key];
    NSLog(@"key: %@, value: %@", key, [array objectAtIndex:0]);
} here

结果是

key: Rows, value: {
Children =     (
            {
        "Cooper 60\U00b0C (140\U00b0F)" = 0;
    },
            {
        "Cooper 75\U00b0C (167\U00b0F)" = 0;
    },
            {
        "Cooper 90\U00b0C (194\U00b0F)" = 14;
    },
            {
        "Aluminum 60\U00b0C (140\U00b0F)" = 0;
    },
            {
        "Aluminum 75\U00b0C (167\U00b0F)" = 0;
    },
            {
        "Aluminum 90\U00b0C (194\U00b0F)" = 0;
    }
);
WireSize = "16 AWG";

}

但仍然不知道如何获得具体值,例如铝 60°C (140°F)1416 AWG 任何帮助都会得到帮助

生命值

4

2 回答 2

0

NSDictionary 键必须是 NSString 对象。鉴于 for loop 的示例使用id key,我敢打赌你已经习惯了像 ruby​​ 这样的语言,它允许键是任意对象类型。由于键必须是 NSStrings,以下将始终有效:

for (NSString *key in dictionary) {
    NSLog(@"key: %@, value: %@", key, [dictionary objectForKey:key]);
}

您可以直接传递字符串。因此,要获得特定值,例如您的示例:

// Edit: objectForValue: should have been objectForKey:
NSLog(@"Value for Aluminum 60°C (140°F): %@", [dictionary objectForKey:@"Aluminum 60°C (140°F)"]);
于 2009-12-19T18:17:51.033 回答
0

如果您想从给定的键进行任意查找,您只需要编写一些帮助方法来遍历您的 plist 数据结构,或者更简洁的是创建几个类来封装这些数据结构并创建一棵树应用程序启动时的这些类。

看起来您还可以稍微简化数据结构。可能是这样的?

<array>
    <dict>
        <key>16 AWG</key>
        <array>
                <dict>
                        <key>Cooper 60°C (140°F)</key>
                        <string>0</string>
                </dict>
                <dict>
                        <key>Cooper 75°C (167°F)</key>
                        <string>0</string>
                </dict>
        </array>
    </dict>
    <dict>
        <key>12 AWG</key>
        <array>
                <dict>
                        <key>Cooper 60°C (140°F)</key>
                        <string>0</string>
                </dict>
                <dict>
                        <key>Cooper 75°C (167°F)</key>
                        <string>0</string>
                </dict>
        </array>
    </dict>
</array>

因此,您可以假设顶级字典数组中的所有键都是线规,每个键的值都是线选项。

于 2009-12-20T16:01:19.287 回答