Оценка элементов в плисте iphone sdk - PullRequest
0 голосов
/ 19 декабря 2009

хорошо, у меня есть список, подобный этому

`
<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

Ответы [ 2 ]

0 голосов
/ 20 декабря 2009

Если вы хотите выполнить произвольный поиск по заданному ключу, вам просто нужно написать несколько вспомогательных методов для итерации по вашей структуре данных 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>

Таким образом, вы можете предположить, что все ключи в массиве верхних уровней являются датчиками проводов, а значения для каждого ключа являются опциями проводов.

0 голосов
/ 19 декабря 2009

Ключи NSDictionary должны быть объектами NSString. Учитывая, что в примере цикла используется 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)"]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...