我正在尝试子类 UIApplication 来捕获所有触摸事件,这用于查看用户是否离开。无论如何,它在您第一次启动该应用程序时效果很好。如果你把它放在后台并再次打开它 2 次,它就会崩溃。我不知道是什么原因造成的。我在 [super sendEvent:event] 上获得 EXEC_BAD_ACCESS;
我的子类 MyUI:
@implementation MyUI
- (void)sendEvent:(UIEvent *)event {
[super sendEvent:event]; // <-- EXEC_BAD_ACCESS
if (event.type == UIEventTypeTouches) {
UITouch *touch = [event allTouches].anyObject;
if (touch.phase == UITouchPhaseBegan) {
// Calling some methods
}
}
}
@end
主.m
int main(int argc, char *argv[])
{
NSString* appClass = @"MyUI";
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, appClass, nil);
[pool release];
return retVal;
}
最佳答案
首先调用父类(super class)方法是否有原因?如果你正在拦截,你应该最后调用它。
这可能是你的问题。我还重写了 sendEvent 以拦截我的应用程序的所有事件并且没有任何问题。
如果您首先调用 super 方法,它会将它传递给所有 UIResponders,这些 UIResponders 最终可能会吃掉您的事件,从而导致 EXEC_BAD_ACCESS。此外,正如 DavidNeiss 建议的那样,删除 super 调用下方的行。如果您仍然收到错误的访问信号,则可能是另一个 View 或 Controller 导致它。您需要堆栈跟踪以找出它的位置。
关于iphone - 子类化 UIApplication 以覆盖 sendEvent 导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5852872/