为了账号安全,请及时绑定邮箱和手机立即绑定

如何调试“发送到实例的未识别选择器”错误

如何调试“发送到实例的未识别选择器”错误

iOS
慕妹3146593 2019-06-15 10:41:27
如何调试“发送到实例的未识别选择器”错误我正在为我的表视图创建一个自定义表格单元格视图。在将自定义单元格的图像视图(在故事板中)连接到我的代码后,我会得到以下错误。[UITableViewCellContentView image]: unrecognized selector sent to instance 0x7fb4fad7fd20'*** First throw call stack:(    0   CoreFoundation                      0x000000010ccbb3f5 __exceptionPreprocess + 165    1   libobjc.A.dylib                     0x000000010e7e9bb7 objc_exception_throw + 45    2   CoreFoundation                      0x000000010ccc250d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205    3   CoreFoundation                      0x000000010cc1a7fc ___forwarding___ + 988    4   CoreFoundation                      0x000000010cc1a398 _CF_forwarding_prep_0 + 120    5   UIKit                               0x000000010d7d8881 -[UITableViewCell _marginWidth] + 151    6   UIKit                               0x000000010d7ca23d -[UITableViewCell _separatorFrame] + 70    7   UIKit                               0x000000010d7ca6fa -[UITableViewCell _updateSeparatorContent] + 360    8   UIKit                               0x000000010d7d4e85 -[UITableViewCell _setSectionLocation:animated:forceBackgroundSetup:] + 1174    9   UIKit                               0x000000010d634ea8 __53-[UITableView _configureCellForDisplay:forIndexPath:]_block_invoke + 1822)你能告诉我如何解决这个错误吗?谢谢。我在我的项目中添加了一个异常断点。这就是它断裂的地方。  override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {        let cell = self.tableView.dequeueReusableCellWithIdentifier(kCellIdentifier) as ItemTableViewCell  <---------------但我的代码中没有使用“图像”。
查看完整描述

3 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

尝试将符号断点设置为-[NSObject(NSObject) doesNotRecognizeSelector:]..只要点击[+]在断点导航器的左下角添加一个断点。然后单击“添加符号断点”。现在再现您的崩溃应该会让您更好地了解代码中的问题发生在哪里。


查看完整回答
反对 回复 2019-06-15
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

关键的第一步是分析错误消息:

[UITableViewCellContentView image]: unrecognized selector sent to instance

这告诉你“信息”image被“发送”到类UITableViewCellContentView的对象。(换句话说,有人试图调用该方法。image关于UITableViewCellContentView类的对象。)

首先要问的是“这样做有意义吗?”可能是命名类具有Image方法,但不是image方法,因此调用时使用了错误的方法名。也可能是命名的方法是someMethod:someParm:,但是类实现了someMethod:someParm:anotherParm:,这意味着调用时省略了一个参数。

但是,大多数情况下,命名类甚至没有任何与命名方法相似的方法,这意味着在失败的调用中使用了指向错误对象的指针。

例如,可以这样做:

NSArray* myArray = [myDictionary objectForKey:@"values"];NSString* myString = [myArray objectAtIndex:5];

并得到一个大致如下的错误:

[__NSDictionaryI objectAtIndex:] unrecognized selector sent to instance

因为从myDictionary实际上,是一个NSDicary,而不是预期的NSArray。

不幸的是,最令人困惑的是,这种错误发生在UI系统代码中,而不是在您自己的代码中。如果您以某种方式将错误的对象传递给系统接口,或者在InterfaceBuilder或其他地方配置了错误的类,则可能会发生这种情况。


查看完整回答
反对 回复 2019-06-15
  • 3 回答
  • 0 关注
  • 343 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信