Dav*_*vid 11 iphone objective-c ipad ios4 ios
我正在尝试子类UIApplication来捕获所有触摸事件,这用于查看用户是否是afk.无论如何,它在您第一次启动应用程序时效果很好.如果你把它放在后台并再次打开它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
Run Code Online (Sandbox Code Playgroud)
的main.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;
}
Run Code Online (Sandbox Code Playgroud)
有没有理由先调用超类方法?如果你正在拦截,你应该最后调用它。
那可能是你的问题。我还覆盖了 sendEvent 以拦截我的应用程序的所有事件并且没有问题。
如果您首先调用 super 方法,它将把它传递给所有 UIResponder,这些 UIResponder 最终可能会吃掉您的事件,从而导致 EXEC_BAD_ACCESS。此外,正如 DavidNeiss 建议的那样,消除 super 调用下方的行。如果您仍然收到错误的访问信号,则可能是另一个视图或控制器导致它。您需要堆栈跟踪以找出它的位置。
小智 4
要获取 EXEC_BAD_ACCESS 的确切原因,请在应用程序中使用 nszombieenabled。此链接将指导您使用它。 http://iosdevelopertips.com/debugging/tracking-down-exc_bad_access-errors-with-nszombieenabled.html