点击IBOutlet与指定的IBAction(UIButton)后,iOS应用程序崩溃,没有任何异常

时间:2015-01-30 09:59:19

标签: ios objective-c iphone uiviewcontroller uibutton

我的任务是使用多行文字输入字段创建自定义UIAlertView,如果点击了关闭按钮,一切都可以正常运行到我需要执行某些操作的位置。例如,我正在使用:http://iphonedevelopment.blogspot.co.uk/2010/05/custom-alert-views.html

我为测试目的创建了非常简单的弹出窗口。基本上它是UIViewController xib,里面有单个按钮。主要课程如下所示:

#import "testViewController.h"

@interface testViewController ()

@end

@implementation testViewController

- (id)init
{
    self = [super initWithNibName:@"testViewController" bundle:nil];

    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)showInView:(UIView *)view
{
    [view addSubview:[self view]];
    [[self view] setFrame: [view bounds]];
    [[self view] setCenter:[view center]];
}

- (IBAction)onTap:(id)sender {
    NSLog(@"All OK");
}

@end

然后在root UIViewController我正在调用我的自定义提醒:

- (IBAction)showAlert:(id)sender
{
    dispatch_async(dispatch_get_main_queue(), ^{
        testViewController *alert = [[testViewController alloc] init];
        [alert showInView:[self view]];
    });
}

到目前为止,我已经尝试过主线程或全局队列,甚至是同步调度,但最终都会中断:

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); <-- Thread 1:EXC_BAD_ACCESS (code=1, address=0xa000000c)
    }
}

试图为按钮添加观察者,但仍然没有去..

非常感谢任何帮助

3 个答案:

答案 0 :(得分:0)

检查您的UIButton是否分配了多个IBoutlet或多个IBActions。这是一个常见问题,有时会在没有我们注意的情况下发生。

答案 1 :(得分:0)

事实证明,在我点击按钮

之前,我的testViewController已被ARC发布

答案 2 :(得分:0)

这里的happing是“如果你想将一个viewcontroller视图添加到其他viewcontroller的视图中,那么在添加视图之后你应该向编译器传达第二个视图控制器将成为第一个视图”

即必须预先确定父母与子女之间的关系。

现在只需使用以下内容修改showAlert方法即可。它正在100%工作。

- (IBAction)showAlert:(id)sender {

    dispatch_async(dispatch_get_main_queue(), ^{
        testViewController *alert = [[testViewController alloc] init];
        [alert showInView:[self view]];

        [self addChildViewController:alert];
        [alert didMoveToParentViewController:self];
    });
}