我在表视图中有一个UILabel,并将标记手动设置为1
我有此代码,当我运行该应用程序时,它可以很好地工作。我确实向下滚动并可以正常工作,名称已正确填写。
但是当我单击该单元格并再次向下滚动时,有时该单元格中的标签有如下错误:
无法识别的选择器已发送到实例0x7fc01d74a710 <-这是我的标签,并且我打印了错误说明:
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[[Mediprecios.RotatedView setText:]:无法识别的选择器发送到实例0x7f8d9073f4f0' 并在labelName.text = name中的cellForRowAtIndexPath方法中崩溃;
po 0x7fc01d74b370
<Mediprecios.RotatedView: 0x7fc01d74b370; frame = (0 100; 345 100); alpha = 0; tag = 1; layer = <CALayer: 0x600000827dc0>>
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
FoldingCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
UILabel *labelName = [cell viewWithTag:1];
NSString *name = [displayItems objectForKey:@"Name"];
labelName.text = name;
return cell;
}
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
FoldingCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (cell.isAnimating) {
return;
}
double duration = 0;
NSNumber *height = [self.cellHeights objectAtIndex:indexPath.row];
bool cellIsCollapsed = height.floatValue == self.kCloseCellHeight;
if (cellIsCollapsed) {
[self.cellHeights setObject:[NSNumber numberWithFloat:self.kOpenCellHeight] atIndexedSubscript:indexPath.row];
[cell unfold:YES animated:YES completion:nil];
duration = 0.5;
} else {
[self.cellHeights setObject:[NSNumber numberWithFloat:self.kCloseCellHeight] atIndexedSubscript:indexPath.row];
//[cell selectedAnimation:false animated:true completion: nil];
[cell unfold:NO animated:YES completion:nil];
duration = 0.8;
}
[UIView animateWithDuration:duration delay:0 options:0 animations:^{
[tableView beginUpdates];
[
tableView endUpdates];
} completion:nil];
}
PD:我使用的是这个库https://github.com/Ramotion/folding-cell
答案 0 :(得分:1)
查看错误[Mediprecios.RotatedView setText:]
,您的代码实际上是在尝试在视图而不是在标签上调用setText方法。
UILabel *labelName = [cell viewWithTag:1];
我的猜测是您的牢房中有任何{1}标签为1的UIView
,而不是UILabel
。
因此,labelName.text = name;
这行实际上尝试在UIView
上设置文本,因为labelName
是UIView
。
尝试将标签更改为较大的随机数,例如35432,然后检查。
以上解决方案是解决该错误的临时解决方法。优良作法是通过子类化FoldingCell
来创建自己的实现,并将标签的IBOutlet
连接到单元格类并进行访问。