motionEnded被多次调用

问题描述:

我有一个UIViewController子类,我试图在视图启动时处理shake事件。motionEnded被多次调用

下面是相关的方法我已经实现:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self becomeFirstResponder]; 
} 

- (void)viewDidDisappear:(BOOL)animated { 
    [self resignFirstResponder]; 
    [super viewDidDisappear:animated]; 
} 

- (BOOL)canBecomeFirstResponder { 
    return YES; 
} 

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event { 
    if (motion == UIEventTypeMotion && event.type == UIEventSubtypeMotionShake) { 
     NSLog(@"%@ motionEnded", [NSDate date]); 
    } 

    if ([super respondsToSelector:@selector(motionEnded:withEvent:)]) { 
     [super motionEnded:motion withEvent:event]; 
    } 
} 

你会想到,当我打^ + Cmd的+ Z在iPhone模拟器,它将只需登录一次,但它始终两次记录为每个事件。下面是三个“摇动”模拟的结果:

2009-10-09 20:52:06.216 TestApp [39802:20b] 2009-10-09 20:52:06 -0400 motionEnded
2009-10- 09:20:52:06.218 TestApp [39802:20b] 2009-10-09 20:52:06 -0400 motionEnded
2009-10-09 20:52:07.689 TestApp [39802:20b] 2009-10-09 20: 52:07 -0400 motionEnded
2009-10-09 20:52:07.690 TestApp [39802:20b] 2009-10-09 20:52:07 -0400 motionEnded
2009-10-09 20:52:08.001 TestApp [39802:20b] 2009-10-09 20:52:08 -0400 motionEnded
2009-10-09 20:52:08.002 TestApp [39802:20b] 2009-10-09 20:52:08 -0400 motionEnded

有没有人看过这个,如果是的话,你是如何解决它的?我正在使用iPhone SDK 3.1和Xcode版本3.1.4。

这里是我所发现的,看起来像一个SIM卡错误对我说:

  1. 问题(双motionEnded通知)时,目标是在SIM OS 3.1和3.1.0
  2. 不会出现此问题发生时SIM卡上的目标为3.0

问题无论目标是什么,实际设备都不会发生问题。

所以这必须是一个模拟错误。 当我有机会我会提交作为一个错误苹果w/repro

+0

你们每个人都弄明白了吗?我有同样的问题 – Mark

还没有看到这个,但你可能想尝试它,而无需调用超级方法。 motionEnded(来自UIResponder)的默认实现应该是NOP,所以不需要调用父方法。

另外,你有没有尝试过这个设备本身?这可能是一个模拟器问题。

+0

删除超级块仍具有相同的效果。我没有在实际的设备上测试过它,因为我很便宜,并且一直在付费购买iPhone开发者计划:)。 –