#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, затем создайте свою метку, добавьте в качестве подвида И присвоите своему свойству.