我正在开发一个游戏,它为每个级别使用不同的控制器。它需要通过加速度计检测抖动,因此它将自己注册为委托,如下所示:
UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = self;
accel.updateInterval = kUpdateInterval;
当关卡结束时,这个控制器会被释放并释放。以前,在释放此控制器后我遇到了崩溃,因为我没有取消 UIAccelerometer 上的委托(即它仍在向现在已释放的对象发送事件)。所以现在,在 dealloc 内部,我正在这样做:
UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = nil;
一切都很好,第一级比赛顺利进行。当我进入下一个级别时,会出现问题,创建一个新的级别控制器并再次运行第一批代码(现在将新控制器设置为委托)。在此之后,我没有收到来自加速度计的任何电话。
所以问题是,对于加速度计,您是否只允许每个应用程序有一个代表,或者我只是错过了什么?我在文档中没有看到任何不允许多次设置委托的内容。我对 Obj-C 有点陌生,但据我了解代表们,这不应该太不正统。
注意:我知道在 3.0 中我可以只收听震动通知。不幸的是,在我对摇晃感兴趣的整个过程中,我需要其他东西来成为第一响应者。所以我不能只重构那个选项。