Objective C Interface Builder ARC - 保留自定义控制器

时间:2012-07-22 22:09:46

标签: objective-c ios xcode xcode4

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

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

只要点击此按钮,我就会得到一个EXC_BAD_ACCESS。通过使用右侧边栏中的“对象”组件将类MyClass添加到视图中。

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

2 个答案:

答案 0 :(得分:1)

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

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

  3. 如果您的自定义视图在屏幕上,那么其超级视图将保留对该视图的引用,并且不会取消分配。如果您的自定义视图控制器具有父视图控制器(如UINavigationController),则其父视图控制器将保留对视图控制器的引用,并且不会取消分配。

  4. -buttonPressed:方法中设置一个断点,以确认它是否被正确调用。然后单步执行代码。

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

答案 1 :(得分:0)

好的,首先是第一件事。为什么要在课堂上添加IBAction?因为控制器应该有出口来处理事件。这课是什么?

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

这只是不好的做法,你的行动的逻辑应该由控制器本身处理,这是控制器的功能,所以最好将动作挂钩在控制器中。