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)または14 または16 AWGなどの特定の値を取得する方法と特定の値はまだわかりません 。

HP

4

2 に答える 2

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 に答える
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 に答える