ios [__NSCFNumber length]:发送到实例的无法识别的选择器

时间:2014-10-01 09:52:46

标签: ios xcode uitableview nscfstring

我创建了一个自定义单元格并在其上放置按钮 和按钮事件是这样的

   [cell.BtnRequest addTarget:self action:@selector(didTapButton:) forControlEvents:UIControlEventTouchUpInside];

和didtapbutton代码就是这个

 - (void)didTapButton:(id)sender {

    WorkerDetailsVC *wvc=[self.storyboard instantiateViewControllerWithIdentifier:@"workerdetailsvc"];
    NSIndexPath *indepath = [self.tblorderdata indexPathForCell:sender];

    wvc.arrworkarrequest=[arrData objectAtIndex:indepath.row];

    NSLog(@" arr send :%@", wvc.arrworkarrequest);

    wvc.struserid = struserid;

   [self.navigationController pushViewController:wvc animated:YES];

    }

在下一页我得到了数组arrworkarrequest,并且在加载所有下一页之后它将显示如下错误

       2014-10-01 15:08:42.607 demo[2151:60b] -[__NSCFNumber length]: unrecognized selector sent to instance 0x911a860
       2014-10-01 15:08:42.613 dmeo[2151:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber length]: unrecognized selector sent to instance 0x911a860'

2 个答案:

答案 0 :(得分:3)

您的问题是,sender的类型为UIButton而不是UITableViewCell,因此它会卡在[self.tblorderdata indexPathForCell:sender]中,因为该方法调用需要UITableViewCell类型{1}}。

您需要找到按钮所在的单元格。您可以使用while循环执行此操作(虽然它有点可怕)。类似的东西:

id obj = sender;
while (![obj isKindOfClass:[UITableViewCell class]]) {
  obj = [sender superview];
}

[self.tblorderdata indexPathForCell:obj];

这感觉就像滥用视图层次结构一样。

答案 1 :(得分:-2)

如果直接比较字符串的长度,就会发生这种情况

例如

NSString * myString = @“2”;

使用此语句将生成错误

如果(myString.length == 2)