- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"myCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
NSArray *allSections =[self.tableDataSource allKeys];
NSArray *aSection = [self.tableDataSource objectForKey:[allSections objectAtIndex:indexPath.section]];
NSMutableDictionary *item = [aSection objectAtIndex:indexPath.row] ;
if (cell == nil) {
/* Trace 1 */
NSLog(@"Init: Section: %i - Row: %i", indexPath.section, indexPath.row);
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.selectionStyle = UITableViewCellSelectionStyleBlue;
UISwitch *mySwitch = [[UISwitch alloc] init];
[mySwitch addTarget:self action:@selector(checkButtonTapped:) forControlEvents:UIControlEventValueChanged];
[mySwitch setOn:NO animated:NO];
cell.accessoryView = mySwitch;
cell.accessoryView.tag = [[item objectForKey:@"ID"] integerValue];
cell.textLabel.text = [item objectForKey:@"Name"];
[item setObject:cell forKey:@"cell"];
} else {
/* Trace 2 */
NSLog(@"Done: Section: %i - Row: %i", indexPath.section, indexPath.row);
cell = [item objectForKey:@"cell"];
}
return cell;}
Привет всем,
Я борюсь с аксессуарами UITableView +, которые иногда "вылетают" во время выполнения.Основной код tableView: cellForRowAtIndexPath чуть выше и, насколько я понимаю, действительно основан на стандартном шаблоне для UITableView.
Мой dataSource небольшой, это всего лишь набор из 2 разделов, одна из 6 строка другой всего 2 строчки.Реализованы все методы, касающиеся количества строк в разделе и количества разделов.
Пользовательский интерфейс в IB имеет необходимые соединения, и фактически все работает нормально.UITableView в IB немного меньше основного вида (под таблицей есть 2 кнопки).Когда я запускаю приложение, я вижу в представлении первые 6 строк (первый раздел), но последние 2 строки (второй раздел) скрыты.Конечно, если я прокручиваю вниз, появятся последние 2 строки ...
Проблема заключается в том, что я уменьшаю размер выхода UITableView в IB.Если розетка отображает только 2 или 3 строки из первого раздела во время выполнения, то при падении прокрутки произойдет сбой приложения.Авария произойдет в первом ряду второго раздела.Только в предыдущей ситуации изменился размер розетки IB, в коде ничего не изменилось.
Сообщение об ошибке в консоли:
* Ошибка подтверждения в - [UITableView _createPreparedCellForGlobalRow: withIndexPath:], /SourceCache/UIKit_Sim/UIKit-1448.89/UITableView.m:5678 2011-07-04 02: 08: 46.713 Клиент iWiR [95362: 207] * Завершение работы приложения из-за невыполненного исключения «NSInternalInconsistencyException»,причина: 'UITableView dataSource должен вернуть ячейку из tableView: cellForRowAtIndexPath:'
Если вы посмотрите на код, вы увидите, что есть 2 трассировки NSLog.Нормальным поведением для кода является то, что «Trace 1» будет отображаться в консоли для первого отображения строки, а затем, если я прокручиваю вверх и вниз, это будет «trace 2».Это тот случай, когда IBoutlet UITableView является «достаточно большим», но, как я уже сказал, если я уменьшу размер розетки, консоль будет отображать «Trace 2» даже для первого отображения строки.
Я надеюсь, что эти (длинные) объяснения достаточно ясны, и большое спасибо за вашу помощь ...
Приветствия, Пьер