У меня есть собственный UITableViewCell, который я создал в IB. Чтобы заполнить UITableView экземплярами этих ячеек, загруженными из NIB, я использую следующий код:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"overviewCell";
HOStoreOverviewCell *cell = (HOStorwOverviewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
UIViewController *c = [[UIViewController alloc] initWithNibName:@"HOStoreOverviewCell" bundle:[NSBundle mainBundle]];
cell = (HOStoreOverviewCell *)c.view;
}
HOStore *itemAtIndex = (HOStore *)[self.infoController storeInListAtIndex:indexPath.row];
cell.storeName.text = itemAtIndex.name;
cell.distance.text = [itemAtIndex niceDistance];
cell.hours.text = [itemAtIndex.currentHour niceHours];
NSLog(@"%@", cell);
return cell;
}
HOStoreOverviewCell — это моя пользовательская UITableViewCell в NIB, которая содержит три UILabels (имя магазина, расстояние и часы). Таким образом, этот код пытается удалить из очереди повторно используемую ячейку, и если это не удается, он создает новую, загружая ее из NIB. Затем он устанавливает текст UILabels как релевантные биты информации из элементов (HOStore) в массиве. Довольно стандартные вещи.
Моя проблема заключается в следующем: большинство ячеек отображаются правильно, но время от времени (мне не удалось достоверно воспроизвести это) UITableView "пропустит" ячейку - например, он отобразит 10-ю ячейку и 12-ю ячейку. но не 11 ячейка. Вместо 11-й ячейки есть пустое место, и нажатие на это место не дает никакого эффекта. Нажатие в любом месте ниже пустого места даст мне метод делегата didSelectRowAtIndexPath:indexPath с indexPath.row, всегда установленным на отсутствующий индекс (например, 11).
Корень проблемы появляется при просмотре вывода NSLog (отрывок):
2009-08-26 00:22:29.292 AppName[380:207] <HOStoreOverviewCell: 0x42c9880; baseClass = UITableViewCell; frame = (0 660; 320 66); autoresize = W; layer = <CALayer: 0x42c9a60>>
2009-08-26 00:22:30.331 AppName[380:207] <HOStoreOverviewCell: 0x42c9880; baseClass = UITableViewCell; frame = (0 nan; 320 66); autoresize = W; layer = <CALayer: 0x42c9a60>>
2009-08-26 00:22:32.138 AppName[380:207] <HOStoreOverviewCell: 0x42c71d0; baseClass = UITableViewCell; frame = (0 594; 320 66); autoresize = W; layer = <CALayer: 0x42c73b0>>
Обратите внимание на нан в кадре во второй строке. Это соответствует обратному вызову cellForRowAtIndexPath:indexPath, который я получаю, когда «пустая» ячейка прокручивается в поле зрения.
Любые идеи о том, что может быть причиной этого?