无法识别的选择器发送到实例

Posted

技术标签:

【中文标题】无法识别的选择器发送到实例【英文标题】:Unrecognized Selector Sent to Instance 【发布时间】:2013-10-12 20:25:52 【问题描述】:

我尝试过针对同一问题的其他问题,但无法找到答案。

错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCell setLecture:]: unrecognized selector sent to instance 0xa85d800'

以下是代码中的相关sn-ps:

// UITableViewCell .h
@interface ITCourseDetailTableViewCell : UITableViewCell

@property (strong, nonatomic) ITClass * lecture;

@property (strong, nonatomic) IBOutlet UILabel *lectureCode;

- (void)setLecture:(ITClass *)lecture;

@end

// UITableViewCell .m
- (void)setLecture:(ITClass *)lecture

    self.lecture = lecture;

    self.lectureCode.text = self.lecture.classCode;

这里是被调用的方法。此外,这就是问题所在:

// view controller .m
- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath

    NSString * cellIdentifier = @"ITCourseDetailTableViewCell";

    ITCourseDetailTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (!cell) 
        NSArray * nib = [[NSBundle mainBundle] loadNibNamed:cellIdentifier owner:self options:nil];
        cell = [nib objectAtIndex:0];
    

    ITClass * currentClass = [[[self course] courseLectures] objectAtIndex:indexPath.row];
    cell.lecture = currentClass;

    return cell;

此调用出现问题:cell.lecture = currentClass;

该方法肯定存在于单元类中。在堆栈跟踪中,我可以确认正在实例化正确的单元格,并且它具有 _lecture 实例变量。

确认类在IB中设置正确的相关截图

非常感谢。

【问题讨论】:

你不相信这个消息?? "cell" 绝对是一个 UITableViewCell。 @HotLicks 对不起,我不明白你的评论。语句ITCourseDetailTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 表示cellITCourseDetailTableViewCell,它是UITableViewCell 的子类。我能够解决此问题的唯一方法是删除该类并使用完全相同的代码重新创建另一个。 我的意思是消息意味着被“发送”的 setLecture 项目是一个 UITableViewCell。这是一个明确、积极和真实的陈述,可以对任何计算机做出任何陈述。目前尚不清楚为什么该类而不是您的子类最终出现在“单元格”中,但这是一个应该调试的问题,不奇怪为什么错误消息是“错误的”。 @HotLicks 绝对同意! How can I debug 'unrecognized selector sent to instance' error的可能重复 【参考方案1】:

您没有使用表格单元格的子类。该错误表明您尝试使用常规 UITableCell 实例。确保在 nib 中设置单元格类,用于 IB 中的单元格!

在 IB 中

选择您的单元格视图, 打开检查器并转到选项卡 3。 填写“自定义课程”以指向您的课程

【讨论】:

感谢您的回答。我不知道是什么。我改变了它,但我遇到了同样的问题*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCell setLecture:]: unrecognized selector sent to instance 0x8947930' 再次感谢。我已经添加了屏幕截图,我想我已经正确设置了它。当我输入“单元格”时,它显示它是ITCourseDetailTableViewCell 的一个实例。但我确实明白你的意思。我试图清理构建文件夹,但没有帮助。【参考方案2】:

无法识别的选择器也有同样的问题。 我将 self 添加到下面的选择器函数中,它起作用了。

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.handleTapOnDescription))

【讨论】:

以上是关于无法识别的选择器发送到实例的主要内容,如果未能解决你的问题,请参考以下文章

快速代码崩溃:“发送到实例的无法识别的选择器”

Swift 3:将无法识别的选择器发送到手势识别器实例

无法识别的选择器发送到实例,UISlider swfit3

UITableViewController 无法识别的选择器发送到实例

无法识别的选择器发送到实例

[UICollectionViewCell imageView]:无法识别的选择器发送到实例