Plists действительно полезны во многих случаях:
+ (NSMutableDictionary*) containerDictionary {
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"ContainerGraphics.plist"];
NSMutableDictionary *plistData = [NSMutableDictionary dictionaryWithContentsOfFile:finalPath];
return plistData;
}
Это загружает файл plist (список свойств) под названием «ContainerGraphics.plist» из моего пакета приложений.
Файл plist на самом деле является просто файлом XML. Вы можете создать его в Xcode, выбрав «новый файл» -> «ресурс» -> «Список свойств».
Вы на самом деле не говорите, что именно вы не понимаете, поэтому, если есть что-то конкретное, что вам трудно понять, пожалуйста, уточните :)
РЕДАКТИРОВАТЬ:
С опубликованным вами plist используйте мой описанный выше подход, чтобы «загрузить» файл plist. Тогда это NSDictionary из NSDictionaries.
Итак, чтобы добраться до словаря «Apple», вы идете:
NSDictionary *appleDictionary = [plistData objectForKey:@"Apple"];
Это что-то значит — зайдите в список и найдите словарь «Apple».
Теперь, чтобы получить значения изображения и описания, вы должны пойти:
NSString *imagePath = [appleDictionary objectForKey:@"image"];
NSString *descriptionString = [appleDictionary objectForKey:@"description"];
Это в значительной степени то, что есть к этому.
Если у вас есть tableView, который необходимо заполнить этими данными, есть уловка! Данные внутри NSDictionary не имеют порядка. Таким образом, вы не можете просто ссылаться на [словарь objectAtIndex:indexPath.row], как на массив данных для tableView.
Что вы делаете, так это сначала получаете plistData, как в моем первом примере. (сделайте это в viewDidLoad). Затем вы извлекаете все ключи из словаря plistData — обратите внимание, что «верхний словарь специфичен», «Apple», «Orange» и т. д., а не значения, которые вы хотите жестко закодировать в своем приложении. Но словари внутри этих словарей общие, изображения, описания…
So:
NSArray *allKeys = [plistData allKeys];
массив allKey теперь содержит ключи (Apple, Orange и т. д.) для доступа к NSDictionaries в plistData.
Теперь в методе cellForRowAtIndexPath вы можете:
NSDictionary *dictionaryForCurrentCell = [plistData objectForKey:[allKeys objectAtIndex:indexPath.row]];
[cell.textLabel setText:[dictionaryForCurrentCell objectForKey:@"image"]];
[cell.detailLabel setText:[dictionaryForCurrentCell objectForKey:@"description"]];
Надеюсь, поможет:)
14.12.2010