使用分配的iAction(UIButton)点击iOutlet后,iOS应用程序崩溃,无任何异常

使用分配的iAction(UIButton)点击iOutlet后,iOS应用程序崩溃,无任何异常,ios,objective-c,iphone,uiviewcontroller,uibutton,Ios,Objective C,Iphone,Uiviewcontroller,Uibutton,我的任务是创建带有多行文本输入字段的自定义UIAlertView,所有操作都非常顺利,如果点击了Dismise按钮,我需要执行一些操作。作为我使用的示例: 我已经创建了非常简单的测试目的弹出窗口。基本上它是UIViewController xib,其中有一个按钮。主要类别如下所示: #import "testViewController.h" @interface testViewController () @end @implementation testViewController

我的任务是创建带有多行文本输入字段的自定义UIAlertView,所有操作都非常顺利,如果点击了Dismise按钮,我需要执行一些操作。作为我使用的示例:

我已经创建了非常简单的测试目的弹出窗口。基本上它是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
然后在根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)
    }
}
试图为按钮添加观察者,但仍然无法进行


非常感谢任何帮助

检查您的UIButton是否分配了多个IBoutlet或多个IBAction。这是一个常见的问题,有时会在我们未经通知的情况下发生。

事实证明,在我点击按钮之前,我的testViewController是由ARC发布的。

这里发生的情况是,如果您想将一个viewcontroller视图添加到另一个viewcontroller的视图中,那么在添加视图后,您应该向编译器传达第二个视图控制器是要成为第一个孩子吗

i、 e必须事先告知父母与子女的关系

现在只需使用以下内容修改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];
    });
}

使用异常断点跟踪错误Hi,感谢mahi vamsi的输入。我刚刚发现问题在于,我的testViewController是由ARC在我点击关闭按钮之前释放的。现在的问题是如何使用ARC保留我的testViewController?理想情况下,当我不必存储变量fire and forget?抱歉,我忘了提到我正在使用异常断点,但应用程序总是在问题中描述的点停止如果您对我的答案满意,请单击正确的标记或投票给我: