使用分配的iAction(UIButton)点击iOutlet后,iOS应用程序崩溃,无任何异常
我的任务是创建带有多行文本输入字段的自定义UIAlertView,所有操作都非常顺利,如果点击了Dismise按钮,我需要执行一些操作。作为我使用的示例: 我已经创建了非常简单的测试目的弹出窗口。基本上它是UIViewController xib,其中有一个按钮。主要类别如下所示:使用分配的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
#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?抱歉,我忘了提到我正在使用异常断点,但应用程序总是在问题中描述的点停止如果您对我的答案满意,请单击正确的标记或投票给我: