2014-10-01 67 views
0

我已创建了一个自定义单元格和穿上它 按钮和按钮事件是这样IOS [__NSCFNumber长度]:无法识别的选择发送到实例

[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' 
+0

显示您的调用堆栈,请。 – orkenstein 2014-10-01 09:58:33

回答

2

您的问题是sender的类型是UIButton而不是UITableViewCell所以它卡在[self.tblorderdata indexPathForCell:sender]因为该方法调用需要一种类型UITableViewCell

您需要找到该按钮所在的单元。您可以使用while循环执行此操作(尽管有点可怕)。例如:

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

[self.tblorderdata indexPathForCell:obj]; 

这感觉就像是在滥用视图层次。

+0

+1 - 确切地说,您正在将控件事件添加到cell.BtnRequest,因此UIButton * BtnRequest *,而不是单元格。你可能能够逃脱使用BtnRequest的superview,这应该是单元格 - 我不确定这会工作。 – 2014-10-01 10:19:33

+0

请告诉我更多关于这个,我做什么? – Ujesh 2014-10-01 10:19:49

+0

如果我做同样的代码没有阵列,那么它的工作是完全的,所以这是我的大型阵列的问题,我发送22对象与关键到下一页 – Ujesh 2014-10-01 11:16:52

-2

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

例如

的NSString *的myString = @ “2”;

使用此语句将产生错误

如果(myString.length == 2)

+0

不,它不会。发生此错误是因为在NSNumber上调用了长度方法,并且NSNumber不响应方法长度。像这样(@ 2).length可能会导致此错误。由于他没有在这段代码中调用长度方法,所以很可能是因为'sender'的类型混淆。 – 2014-10-01 10:19:16

+0

它发生在他的下一个视图控制器被调用后,所以我认为在那里发生了错误。他应该添加一个断点并检查他到底在哪里得到该异常。 – 2014-10-01 10:25:56

相关问题