ios [__NSCFNumber 长度]:发送到实例的无法识别的选择器
Posted
技术标签:
【中文标题】ios [__NSCFNumber 长度]:发送到实例的无法识别的选择器【英文标题】:ios [__NSCFNumber length]: unrecognized selector sent to instance 【发布时间】:2014-10-01 09:52:45 【问题描述】:我创建了一个自定义单元格并在其上放置了按钮 而按钮事件是这样的
[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'
【问题讨论】:
请显示您的调用堆栈。 【参考方案1】:您的问题是 sender
的类型是 UIButton
而不是 UITableViewCell
所以它卡在 [self.tblorderdata indexPathForCell:sender]
中,因为该方法调用需要 UITableViewCell
类型。
您需要找到按钮所在的单元格。您可以使用 while 循环来执行此操作(尽管它有点可怕)。比如:
id obj = sender;
while (![obj isKindOfClass:[UITableViewCell class]])
obj = [sender superview];
[self.tblorderdata indexPathForCell:obj];
这感觉就像是在滥用视图层次结构。
【讨论】:
+1 - 确切地说,您正在将控件事件添加到 cell.BtnRequest,因此是 UIButton BtnRequest,而不是单元格。您也许可以使用 BtnRequest 的超级视图,它应该是单元格 - 我不确定这是否会起作用。 请告诉我更多关于这个的信息,我该怎么做? 如果我在没有数组的情况下执行相同的代码,那么它完全可以工作,所以这是我的大数组的问题,我将 22 个对象与下一页的键一起发送 如果您还没有,我建议您在所有异常上都设置断点,这样您的程序应该在触发问题的调用上停止。【参考方案2】:如果你直接比较字符串的长度会发生这种情况
例如
NSString *myString = @"2";
使用此语句会产生错误
如果(myString.length==2)
【讨论】:
不,不会的。发生此错误是因为已在 NSNumber 上调用了 length 方法,并且 NSNumber 不响应方法长度。像这样的 (@2).length 可能会出现此错误。由于他没有在这段代码中调用 length 方法,很可能是因为sender
的类型混淆。
它发生在他的下一个视图控制器被调用之后,所以我相信那里发生了错误。他可能应该添加一个断点并检查他到底在哪里得到了那个异常。以上是关于ios [__NSCFNumber 长度]:发送到实例的无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章
[__NSCFNumber countByEnumeratingWithState:objects:count:]:发送到实例的无法识别的选择器
iOS报错[__NSCFNumber length]: unrecognized
iOS:寻找 NSDictionary 值时出现错误:[__NSCFNumber isEqualToString:]: unrecognized selector sent to instanc
ios [__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x7a97d4c0'报错