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



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

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

我一点击这个按钮,就会得到一个EXC_BAD_ACCESS。MyClass类是通过使用右侧边栏中的"Object"组件添加到视图中的。

我想这是因为我的自定义控制器被ARC解除分配。这是正确的吗?通过接口控制器添加的对象是否未自动保留?如何保留我通过接口生成器连接的实例?

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

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

  3. 如果您的自定义视图在屏幕上,那么它的超级视图将包含对该视图的引用,并且不会解除分配。如果自定义视图控制器有一个父视图控制器,如UINavigationController,则其父视图控制器将保存对视图控制器的引用,并且不会解除分配。

  4. -buttonPressed:方法中设置一个断点,以确认它被正确调用。然后逐步完成代码。

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

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

你必须在你的控制器中实例化它(不知道你是如何连接的)并保留它才能生效,因为它可能会变为零,因为没有什么东西可以容纳它

这只是一种糟糕的做法,操作的逻辑应该由控制器本身处理,这是控制器的功能,所以最好将操作挂接到控制器中。

最新更新