Я использую plist для хранения данных о стране для пользователей моего приложения.Итак, у меня есть список <dict>
, который содержит несколько стран .Для каждой страны есть несколько провинций .Для каждого региона есть регионов .И каждый регион содержит много городов .
Итак, мой список выглядит следующим образом:
<dict>
<key>Country</key>
<array>
<dict>
<key>ISO</key>
<string>ES</string>
<key>Value</key>
<string>Spain</string>
<key>Children</key>
<array>
<dict>
<key>ISO</key>
<string>AL</string>
<key>Value</key>
<string>Andalucia</string>
<key>Children</key>
<array>
...
</array>
</dict>
</array>
</dict>
</array>
</dict>
Самый подробный узел - это город, в котором информация хранится как:
<dict>
<key>ISO</key>
<string>03002</string>
<key>Value</key>
<string>ALICANTE</string>
</dict>
В базе данных я сохраняю 03002 , который в данном случае является уникальным ключом для Аликанте .Но в моем графическом интерфейсе я, очевидно, хочу отображать Аликанте, а не числовое представление.
Так есть ли простой способ поиска в этом файле plist, чтобы найти соответствующее значение для этого ISO?
Спасибо!
РЕДАКТИРОВАТЬ
На данный момент я создал этот метод.Это помогает, но я не могу назвать это эффективным кодированием.Поэтому, пожалуйста, посоветуйте ...
- (NSString *)getCityNameForKey: (NSString *)ISO {
NSString *cityName = @"";
NSArray *citySource = [[Locations getInstance] toDataSource];
for (int i = 0; i < [citySource count]; i++) {
//Country
NSDictionary *p_dictionary = [citySource objectAtIndex:i];
NSArray *provinces = [p_dictionary objectForKey:@"Children"];
if ([provinces count] > 0) {
//Province
for (int j = 0; j < [provinces count]; j++) {
NSDictionary *r_dictionary = [provinces objectAtIndex:j];
NSArray *regions = [r_dictionary objectForKey:@"Children"];
if ([regions count] > 0) {
//City
for (int k = 0; k < [regions count]; k++) {
NSDictionary *c_dictionary = [regions objectAtIndex:k];
NSArray *cities = [c_dictionary objectForKey:@"Children"];
if ([cities count] > 0) {
for (int l = 0; l < [cities count]; l++) {
NSDictionary *result_dict = [cities objectAtIndex:l];
if ([[result_dict objectForKey:@"ISO"] isEqualToString:ISO]) {
index_country = i;
index_province = j;
index_region = k;
index_city = l;
cityName = [result_dict objectForKey:@"Value"];
return cityName;
break;
}
}
}
}
}
}
}
}
return cityName;
}