Cocotutch -
Вот реализация, которую я использовал для индексации запроса, содержащего все песни в моей музыкальной библиотеке:
MPMediaQuery *allSongsQuery = [MPMediaQuery songsQuery];
// Fill in the all songs array with all the songs in the user's media library
allSongsArray = [allSongsQuery items];
allSongsArraySections = [allSongsQuery itemSections];
allSongsArraySections - это NSArray для MPMediaQuerySection, каждая из которых имеетназвание и диапазон.Объект NSArray для нулевого раздела (с заголовком @ "A" в моем случае) имеет range.location 0 и range.length 158.
Я возвращаю значение range.length для каждого раздела, когда вызывается numberOfRowsInSectionдля моего UITableView.Я использую значение range.location в cellForRowAtIndexPath в качестве начальной строки раздела, а затем добавляю к нему indexPath.row, чтобы получить ячейку, которую мне нужно вернуть из моего allSongsArray.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
....
// Return the number of rows in the section.
MPMediaQuerySection *allSongsArraySection = globalMusicPlayerPtr.allSongsArraySections[section];
return allSongsArraySection.range.length;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
...
MPMediaQuerySection *allSongsArraySection = globalMusicPlayerPtr.allSongsArraySections[indexPath.section];
rowItem = [globalMusicPlayerPtr.allSongsArray objectAtIndex:allSongsArraySection.range.location + indexPath.row];
....
}
Прежде чем использовать это, я попытался сопоставить реализацию родного музыкального плеера, написав свою собственную, и она не вела себя достаточно идентично.Не только это, но и собственная индексация НАМНОГО быстрее!