iphone - 子类化 UIApplication 以覆盖 sendEvent 导致崩溃

标签 iphone ios objective-c ipad ios4

我正在尝试子类 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/

相关文章:

ios - 当用户点击 View Controller 时如何使 SWRevealViewController 菜单消失

ios - 在 iOS 中使用 AFNetworking 下载文件

ios - 当我尝试对我的选项卡栏项目执行操作时,我很快,我只能创建一个 socket 或一个 socket 集合我该如何执行操作?

ios - 我如何在多个 View 中调用相同的 xib 但区分我正在交互的?

iphone - 这个方法背后的代码在哪里

iphone - 在核心数据中保存照片

ios - Iphone 在 prefix.pch 中写入代码

ios - Swift 中的 UISlider iOS 应用程序自定义值

objective-c - 在 Objective-C 中清除一个 int[x][y] 数组

ios - 启动图像在不应显示时显示 - iOS