Было бы хорошо, если вы можете предварительно обработать это, но если вы не можете сделать это по какой-то причине, то это то, что вы должны сделать,
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
MPSection * section = [self.sections objectAtIndex:section];
NSInteger count = [section.items count];
return ((count % 2 == 0)? count / 2 : (count / 2 + 1) );
}
И в методе tableView:cellForRowAtIndexPath:
,
/* */
MPSection *section = [self.sections objectAtIndex:indexPath.section];
id item1 = [section.items objectAtIndex:(indexPath.row * 2)];
id item2 = ((indexPath.row * 2 + 1) < [section.items count])? [section.items objectAtIndex:(indexPath.row * 2 + 1)] : nil;
/* Use item1 & item2 to fill both the subviews */
Оригинальный ответ
Используйте для этой цели экземпляр NSEnumerator
NSEnumerator *enumerator = [section.items objectEnumerator];
id item1, item2;
while ( (item1 = [enumerator nextObject]) && (item2 = [enumerator nextObject]) ) {
// Use item1 & item2
}
Поэтому я думаю, что вы должны получить ошибку индексации из границ для упомянутого вами фрагмента.
Overkill
Похоже, возникает вопрос о производительности, поэтому я протестировал три предложенных метода и рассчитал их по времени в цикле, где я их регистрирую.
Enumerator, Fast Enumeration with Object Search, For Loop (50000 elements): 19.253626, 88.269961, 18.767572
Enumerator, Fast Enumeration with Object Search, For Loop (25000 elements): 9.164311, 25.105664, 8.777443
Enumerator, Fast Enumeration with Object Search, For Loop (10000 elements): 3.428265, 6.035876, 3.144609
Enumerator, Fast Enumeration with Object Search, For Loop (5000 elements): 2.010748, 2.548562, 1.980477
Enumerator, Fast Enumeration with Object Search, For Loop (1000 elements): 0.508310, 0.389402, 0.338096
Enumerator, Fast Enumeration with Object Search, For Loop (500 elements): 0.156880, 0.163541, 0.150585
Enumerator, Fast Enumeration with Object Search, For Loop (100 elements): 0.076625, 0.034531, 0.036576
Enumerator, Fast Enumeration with Object Search, For Loop (50 elements): 0.026115, 0.022686, 0.041745
На первый взгляд, циклический подход @ Caleb for
может быть лучшим подходом.