在iPhone应用程序中,我有一个带有按钮的视图。 Button连接到MyClass的IBAction
。
@interface MyClass : NSObject
-(IBAction)buttonPressed:(id)sender;
@end
只要点击此按钮,我就会得到一个EXC_BAD_ACCESS。通过使用右侧边栏中的“对象”组件将类MyClass
添加到视图中。
我认为这是因为我的自定义控制器被ARC取消分配。它是否正确?是否通过接口控制器添加的对象不会自动保留?如何保留我通过界面构建器连接的实例?
答案 0 :(得分:1)
MyClass
必须是UIView
的子类,而不是NSObject
。
如果您认为对象过早被释放,请实施-dealloc
方法并添加一些日志记录和断点。
如果您的自定义视图在屏幕上,那么其超级视图将保留对该视图的引用,并且不会取消分配。如果您的自定义视图控制器具有父视图控制器(如UINavigationController),则其父视图控制器将保留对视图控制器的引用,并且不会取消分配。
在-buttonPressed:
方法中设置一个断点,以确认它是否被正确调用。然后单步执行代码。
查看EXC_BAD_ACCESS时的调用堆栈,以更好地隔离问题所在。您的-buttonPressed:方法是否实际被调用?
答案 1 :(得分:0)
好的,首先是第一件事。为什么要在课堂上添加IBAction?因为控制器应该有出口来处理事件。这课是什么?
你必须在你的控制器中实例化它(不知道你是如何把它连接起来的)并保留它以使它生效,因为它可能变成零,因为没有任何东西持有它。
这只是不好的做法,你的行动的逻辑应该由控制器本身处理,这是控制器的功能,所以最好将动作挂钩在控制器中。