1

在 iPhone 应用程序中,我有一个带有按钮的视图。Button 连接到IBActionMyClass。

@interface MyClass : NSObject   
-(IBAction)buttonPressed:(id)sender;
@end

当我点击这个按钮时,我得到一个 EXC_BAD_ACCESS。使用右侧边栏中的“对象”组件将该类MyClass添加到视图中。

我认为这是因为我的自定义控制器被 ARC 释放。它是否正确?通过接口控制器添加的对象不会自动保留吗?如何保留我通过接口构建器连接的实例?

4

2 回答 2

1
  1. MyClass必须是 的子类UIView,而不是NSObject

  2. 如果您认为一个对象被过早地释放,请实现该-dealloc方法并添加一些日志记录和一个断点。

  3. 如果您的自定义视图在屏幕上,那么它的超级视图将持有对该视图的引用,并且不会被释放。如果您的自定义视图控制器有一个父视图控制器,例如 UINavigationController,那么它的父视图控制器将持有对您的视图控制器的引用,并且不会被释放。

  4. 在您的方法中设置断点-buttonPressed:以确认它被正确调用。然后单步执行代码。

  5. 查看 EXC_BAD_ACCESS 时的调用堆栈,以更好地隔离问题所在。你的 -buttonPressed: 方法实际上被调用了吗?

于 2012-07-22T22:47:25.590 回答
0

好的,第一件事。为什么要将 IBAction 添加到您的课程中?因为控制器应该有处理事件的出口。这门课是什么?

你必须在你的控制器中实例化它(不知道你是如何连接它的)并保留它以使其生效,因为它可能会变为 nil,因为没有任何东西持有它。

这只是不好的做法,您的操作逻辑应该由控制器本身处理,这是控制器的功能,因此最好将操作挂接到控制器中。

于 2012-07-22T22:13:50.650 回答