Я обнаружил странное поведение с setSelected: анимированным: в моем пользовательском классе UITableViewCell. Я обнаружил, что эта функция вызывается несколько раз, если я нажимаю на ячейку в своей таблице. Мне интересно, если это нормальное поведение или ошибка в моем коде.
Чтобы помочь в отладке, я изменил функцию setSelected: анимированный: в моей собственной реализации класса UITableViewCell как таковой:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state.
if (selected)
NSLog(@"Yes %X", &self);
else
NSLog(@"No %X", &self);
}
Если я нажимаю на ячейку в симуляторе, вот что я получаю в консоли:
2011-03-22 22:05:26.963 marketPulse[3294:207] Yes BFFFDDD0
2011-03-22 22:05:26.964 marketPulse[3294:207] Yes BFFFDE30
Вы бы подумали, что я получу только 1 запись, так как я только нажал на 1 ячейку.
И если после этого я нажимаю на другую ячейку:
2011-03-22 22:07:11.014 marketPulse[3294:207] No BFFFD890
2011-03-22 22:07:11.016 marketPulse[3294:207] No BFFFDD00
2011-03-22 22:07:11.017 marketPulse[3294:207] Yes BFFFDDD0
2011-03-22 22:07:11.017 marketPulse[3294:207] Yes BFFFDE30
Если я нажимаю одну и ту же ячейку 2 раза подряд, я получаю больше 2 Да:
2011-03-22 22:08:41.067 marketPulse[3294:207] Yes BFFFDDD0
2011-03-22 22:08:41.068 marketPulse[3294:207] Yes BFFFDE30
2011-03-22 22:08:41.069 marketPulse[3294:207] Yes BFFFDE30
Чем больше раз я нажимаю одну и ту же ячейку, тем больше Да я получу, и если после этого я нажму на другую ячейку, я получу много Нет
Я поставил точку останова перед NSLog и, глядя на отладчик, кажется, что все повторяющиеся вызовы происходят от одного и того же объекта.
Вот часть моей функции tableView: cellForRowAtIndexPath:, чтобы вы могли видеть, как обрабатываются мои ячейки:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *ContentCellIdentifier = @"newsTableCellContent";
UITableViewCell *cell;
//index of cell data in tableData
NSUInteger index = indexPath.row / 2;
...
//content of story
else if( [indexPath row] % 2 == 1 ) {
cell = [tableView dequeueReusableCellWithIdentifier:ContentCellIdentifier];
if (cell == nil) {
NSArray *topLevelObjects = [[NSBundle mainBundle]
loadNibNamed:@"newsTableCells"
owner:nil options:nil];
for (id currentObject in topLevelObjects) {
if ( [currentObject isKindOfClass:[newsTableCellContent class]] ) {
cell = currentObject;
break;
}
}
}
((newsTableCellContent *)cell).content.text = [[tableData objectAtIndex:index] description];
}
return cell;
}
Все работает отлично, поэтому трудно определить, намерены ли повторные вызовы setSelected: анимированные:. Если это нормальная работа, я могу обойтись другим методом, но я просто хотел бы знать, произойдет ли это или нет.
Спасибо