我有一个 View Controller (vc1),它使用另一个类来获取 UI 元素。 因此 vc1 的 View 将另一个 View 设置为 subview ,该 View 从名为 Layout 的类返回。 从类 Layout 返回的 View 包含一个 UIbutton。 在 Layout 类中,我有以下代码:
[btn addTarget:self action:@selector(button_clicked:) forControlEvents:UIControlEventTouchUpInside];
然后在同一个类(Layout)中我也声明了方法button_clicked:
- (void)button_clicked:(id)sender {
NSLog(@"btn clickd");
}
但是,当我点击按钮时,出现了错误。我在调试区域看不到任何错误消息,但 Xcode 的状态看起来不太好。模拟器失去焦点,Xcode 出现了一个文件(我猜是 AppDelegate.m),其中包含以下行:
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
用绿色突出显示。 此外,在代码中我看到消息:
线程 1:EXC_BAD_ACCESS(code=2, address=0x9)
有什么问题吗?我也担心 vc1 应该管理按钮点击,所以我认为最好将方法放在 vc1 中。你不这么认为吗?
最佳答案
您的描述表明,您设置为按钮目标的 Layout
实例在您按下按钮之前被释放,因此,当您按下按钮时,您将使用无效指针。
检查正在使用的 Layout
实例的保留情况,并确保它被保留(至少保留它作为按钮操作目标的时间)。
关于点击按钮时出现 iOS EXC_BAD_ACCESS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25877786/