Сбой при установке текста в пользовательскую метку ячейки таблицы

#iphone #objective-c #ios #uitableview #uilabel

#iPhone #objective-c #iOS #uitableview #uilabel

Вопрос:

Мое приложение выходит из строя, когда я хочу задать текст метки, принадлежащей ячейке таблицы. Мой фрагмент кода выглядит следующим образом:

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

if (cell == nil) 
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:simpleTableIdentifier];
    [cell autorelease];

    CGRect splitMethodLabelRect = CGRectMake(160, 6, 50, 30); 
    UILabel *splitMethodLabel = [[UILabel alloc] initWithFrame:splitMethodLabelRect]; 
    splitMethodLabel.textAlignment = UITextAlignmentLeft; 
    splitMethodLabel.font = [UIFont systemFontOfSize:13]; 
    splitMethodLabel.tag = kSplitMethodTag;
    [cell.contentView addSubview: splitMethodLabel]; 
    [splitMethodLabel release];

}

UILabel *splitMethodName = (UILabel *)[cell.contentView viewWithTag:kSplitMethodTag]; 

//app crashes at this point
splitMethodName.text = @"Test"; 
  

Проблема, похоже, в том, что я устанавливаю текст.
Трассировка стека ниже:

 2011-04-21 15:11:10.820 BillSplitter[3021:707] -[UITableViewCellContentView setText:]: unrecognized selector sent to instance 0x18a680
2011-04-21 15:11:10.829 BillSplitter[3021:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCellContentView setText:]: unrecognized selector sent to instance 0x18a680'
  

Любые рекомендации по этому поводу приветствуются!

Zhen

Комментарии:

1. Всегда полезно опубликовать трассировку стека 🙂

2. @Zhen: Измените значение тега на что-нибудь другое и проверьте, не происходит ли сбой по-прежнему.

3. @Simon, да, ты прав. Я присвоил 0 значению тега, которое приводит к сбою приложения. Я изменил значение на 1, и теперь оно работает нормально. Большое спасибо за вашу помощь!

4. @Simon 1 за ваш комментарий, который вы должны опубликовать в качестве ответа, чтобы другие могли найти его в будущем.

Ответ №1:

Похоже, что причиной проблемы может быть значение тега, которое вы установили в Splitmethod Label.
Just change the tag value to something else and check if it crashes still.

Ответ №2:

Ах, проблема в том, что вы добавляете свою собственную метку в ячейку в качестве подвида, но не указано свойство, которое ссылается на splitmethod Name. Метка находится в иерархии представлений ячейки, но у вас нет ссылки для доступа к ней.

Вы могли бы исправить это, создав подкласс UITableViewCell и добавив свою метку в качестве свойства. Затем используйте свой пользовательский класс. Переопределите initWithStyle, передайте параметры super, затем создайте свою метку, добавьте в качестве подвида И присвоите своему свойству.