0

我通过 xcode 和目标 c 构建一个 iphone 应用程序。为 ios5.0 min 目标构建。我创建了一个自定义的 uitablecell 并将其加载到视图控制器的表中没有问题。此单元格包含一个按钮。当用户在任何单元格中点击此按钮时,我希望它在视图控制器中调用相同的函数。我过去这样做的方法是使自定义单元格的文件所有者成为有问题的视图控制器,然后简单地控制将按钮拖动到视图控制器中并将 ibaction 函数放在那里。总是工作没问题。到现在。

-[__NSCFString loadMerchant:]:无法识别的选择器发送到实例 0x8689e50 2012-05-24 09:56:14.630 [3217:16103] *由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFString loadMerchant:]:无法识别选择器发送到实例 0x8689e50'

这是我得到的错误。我确保该功能不会意外链接到错误的按钮,该功能也不会错误地出现在 cell.m 中以及我能想到的任何其他简单错误。

有谁知道完成我想做的事情的正确方法?

编辑:自定义单元格

@interface TimelineCell : UITableViewCell


@property (weak, nonatomic) IBOutlet UIButton *nameButton;


@end


@implementation TimelineCell


@synthesize nameButton;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self; }

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state }

@end 

下面是视图控制器

 - (IBAction)loadMerchant:(id)sender;

 - (IBAction)loadMerchant:(id)sender { }

就是这样。当按钮被点击并出现上述错误时会发生崩溃

编辑:在 nib 文件中删除链接并只是将操作添加到按钮似乎可以解决问题,但如果有人能对此有所了解,我仍然想知道它的原因,将不胜感激

在 cellForRowAtIndexPath 内制作

 UIButton *b = (UIButton*)[cell viewWithTag:1];
 [b addTarget:self action:@selector(loadMerchant:) forControlEvents:UIControlEventTouchUpInside];
4

1 回答 1

0

我最终做的是在 nib 文件中标记按钮,然后在代码中通过 cellForRowAtIndexPath 中设置的单元格中的代码添加目标。

UIButton *b = (UIButton*)[cell viewWithTag:1];
 [b addTarget:self action:@selector(loadMerchant:) forControlEvents:UIControlEventTouchUpInside];

虽然这解决了问题,但我仍然不确定为什么通过 IB 建立的链接首先失败了。

于 2012-05-24T11:31:25.820 回答