2013-03-24 4 views
0

Загружаю табличное представление с данными из основных данных. Он загружается с текстом. Каждая ячейка имеет вид uiimageview. Когда таблица называет cellForRow: он либо устанавливает изображение в скрытом, или не скрыто, (в зависимости от того, что основных данных говорит, что это должно быть.)Ячейка UITableView дает неверную информацию

Код:

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath: 
(NSIndexPath *)indexPath{ 

static NSString * identifier = @"identifier"; 

self.cell = [tableView dequeueReusableCellWithIdentifier:identifier]; 

HuntingRifleGuns *handguns = [self.tableArray objectAtIndex:indexPath.row]; 

NSString *brandModel = [[handguns.brand stringByAppendingString:@" "] stringByAppendingString:handguns.model]; 

self.cell.mainLabel.text = brandModel; 

self.cell.nicknameLabel.text = handguns.nickname; 
//Right below me, is where is set the imageView to hidden, or not hidden. 
self.cell.alert.hidden = handguns.showBadge.boolValue; 

self.cell.alert.image = [UIImage imageNamed:@"tvicon.png"]; 

return self.cell; 
} 

Моей проблема: если у меня есть 1 ячейка на представлении таблицы, она работает идеально, но если у меня больше, чем 1 ячейка на столе, она срабатывает.

Я хочу, чтобы проверить, если изображение ячейки скрыто или нет, когда он будет удален:

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 

if (editingStyle == UITableViewCellEditingStyleDelete) {   

    if (!self.cell.alert.isHidden) { 


     NSLog(@"showing"); 

    } 
else{ 

NSLog(@"Not showing"); 
} 
    ......... 

Но когда он проверяет, оно не всегда делает правильные вещи. Он просто распечатывает либо showing, либо not showing случайным образом. И я знаю, должен ли он показывать или нет, потому что он показывает изображение прямо на ячейке. Что может быть причиной этого? Просто боковое примечание, пользователь может установить, что изображение должно быть скрыто или не скрыто в разных представлениях, но табличное представление ВСЕГДА показывает правильные данные, то есть показывает, что изображение видимо или скрыто правильно, только когда я его тестирую, всегда работаю.

Спасибо за помощь!

ответ

2

Вы создали @property под названием cell. Это не сработает.

Вы должны просто использовать UITableViewCell переменную или один с пользовательской ячейке:

CustomCell *cell = [tableView dequeue...]; 

Кроме того, ваша обработка строк не очень память эффективно. Используйте stringWithFormat вместо:

cell.mainLabel.text = [NSString stringWithFormat:@"%@ %@", 
     handguns.brands, handguns.model]; 

Кроме того, чтобы проверить, если вид скрыт, чтобы сообщить ваша логика приложения очень плохая практика. Скорее у вас должна быть надежная модель данных и вместо этого запрашивать модель данных. В вашем случае вы должны запросить соответствующий объект handguns, если у него есть изображение или нет.

1

Странно, что вы назначаете выделенную ячейку собственности на self. Это почти наверняка никогда не будет тем, что, по вашему мнению, будет, поскольку ячейки запрашиваются от -tableView:cellForRowAtIndexPath: недетерминированным способом. Вы должны назначить выделенную ячейку переменной с локальной областью. Используйте параметры -tableView:commitEditingStyle:forRowAtIndexPath: для извлечения ячейки для работы. Например:

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    if ([[[cell textLabel] text] isEqualToString:@"foo"]) { 
     NSLog(@"showing"); 
    } else{ 
     NSLog(@"Not showing"); 
    } 
    } 
} 

Кроме того, при отладке проблемы, как это, часто бывает полезно свести проблему к простейшим вещь, которая до сих пор вызывает проблему. Что произойдет, если вместо использования пользовательской ячейки или всего, что у вас там есть, вы используете простой UITableViewCell с его внешним видом. И вместо того, чтобы скрывать или показывать изображение, которое вы добавили в ячейку, вы просто меняете свой текст по умолчанию на «foo» или «bar» или что-то в этом роде? Если у вас все еще есть проблема, вы будете намного проще и понятнее. Если вы перестанете испытывать проблему, вы можете добавить свой материал обратно за один кусочек за раз, пока не найдете изменения, которые нарушают вещи.

Смежные вопросы