因未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [UIViewControllerWrapperView buttonPressed]:

时间:2013-07-16 07:09:18

标签: uibutton selector

我一直在努力寻找解决方案,但对类似问题的回答并没有让我指出正确的方向。问题如下

在我的iOS应用程序中,我在导航控制器的顶部创建了一个自定义图像视图。这是通过从指定的视图控制器

分配initing BannerView类来完成的

e.g。在我的MasterViewController的viewDidLoad中我调用

BannerView *bannerLogoView = [[BannerView alloc]init];
//add the tabcotroller as a subview of the view
[self.tabBarController.view addSubview:bannerLogoView.bannerView];

BannerView.m

#import "BannerView.h"

@interface BannerView ()

@end


@implementation BannerView


-(id)init {

self = [super init];

if (self) {

    self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bannerImage.jpg"]];
    self.bannerView = [[UIView alloc] initWithFrame:CGRectMake(0,20, 320, 30)];
    [self.bannerView addSubview:self.imageView];
    //NSLog(@"Setting up image from within banner view");
    [self setupButton];



}
return self;

}

- (void)buttonPressed {
NSLog(@"Button pressed");
}


-(void) setupButton {
self.imageView.userInteractionEnabled = YES;    
self.button= [UIButton buttonWithType:UIButtonTypeRoundedRect];

[self.button addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];

self.button.frame = CGRectMake(0.0, 0.0, 320.0, 30.0);
[self.imageView addSubview:self.button];


}

现在,只要点击按钮,我就可以获得没有控制台输出的EXC_BAD_ACCESS,或者 由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [UIViewControllerWrapperView buttonPressed]:无法识别的选择器发送到实例

有人可以帮帮我吗?我可能在这里做了拓扑/继承的错误,但我找不到一个简单的方法来找到它..

提前谢谢

1 个答案:

答案 0 :(得分:1)

不确定是什么导致了你的问题,但你确实有一些奇怪的结构。

首先,通常按钮不会添加到UIImageViews。相反,将它们添加到公共视图,然后调用公共视图的-bringSubviewToFront:以将按钮覆盖到图像视图上。

其次,选择器将发送者作为参数,因此您的选择应该是buttonPressed:并且方法应该是-(void)buttonPressed:(id)sender;