У меня есть plist, который содержит массив с набором словарей. Словари в массиве используются для создания довольно сложного представления таблицы с двумя изображениями и двумя строками текста в каждой ячейке. Я хочу создать разделы в представлении таблицы на основе первой буквы для значения, соответствующего клавише «MainText».Лучший способ захватить массив словарей из plist и создать разделы на основе значений для ключа
Формат plist. В этом примере должно быть 2 раздела, один для словаря со строкой «MainText», начинающийся с «A», и один для 2 словарей с строками «MainText», начиная с «B».
<dict>
<key>Rows</key>
<array>
<dict>
<key>MainText</key>
<string>A sometext</string>
<key>SecondaryText</key>
<string>somemoretext</string>
<key>PrimaryIcon</key>
<string>firsticon.png</string>
<key>SecondaryIcon</key>
<string>secondicon.png</string>
</dict>
<dict>
<key>MainText</key>
<string>B sometext</string>
<key>SecondaryText</key>
<string>somemoretext</string>
<key>PrimaryIcon</key>
<string>firsticon.png</string>
<key>SecondaryIcon</key>
<string>secondicon.png</string>
</dict>
<dict>
<key>MainText</key>
<string>B moreTextStartingWith"B"</string>
<key>SecondaryText</key>
<string>somemoretext</string>
<key>PrimaryIcon</key>
<string>firsticon.png</string>
<key>SecondaryIcon</key>
<string>secondicon.png</string>
</dict>
</array>
Я написал код для извлечения первых букв из строки в ключе «MainText», сортируя их и создавать заголовки разделов. У меня также есть код для установки правильного количества строк в каждом разделе. Вот некоторые из кода, с которым я запутался в моем методе viewDidLoad.
//Create an array sorted by the strings in "MainText" of the AppDelegate.data
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"MainText" ascending:YES] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray = [[AppDelegate.data objectForKey:@"Rows"] sortedArrayUsingDescriptors:sortDescriptors];
//Now set tableDataSource equal to sortedArray
self.tableDataSource = sortedArray;
//Create a set of the first letters used by the strings in MainText
NSMutableSet *firstCharacters = [NSMutableSet setWithCapacity:0];
for(NSString *string in [tableDataSource valueForKey:@"MainText"])
[firstCharacters addObject:[string substringToIndex:1]];
//Create a sorted array of first letters used by strings in MainText
self.arrayOfInitialLetters = [[firstCharacters allObjects] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
//Create an array of the MainText of each item in tableDataSource
NSMutableArray * mainTextArray = [tableDataSource valueForKey:@"MainText"];
Как я должен идти о получении правильных строк в моем методе cellForRowAtIndexPath? В настоящее время в каждом разделе отображаются одни и те же ячейки, начиная с первого. Мне нужно как-то определить в моем источнике данных, что есть разные разделы. Спасибо за помощь, это была настоящая борьба!
В вашем PLIST я полагаю, что следует читать со вторым закрытием и что должен быть на end? ... – h4xxr
Да, это так. Он должен быть потерян в копии. Я исправил его выше. – Jonah