我正在开发,使用为每个级别不同的控制器游戏。它需要检测经由所述加速度计抖动,所以它本身注册为像这样的委托:

UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = self;
accel.updateInterval = kUpdateInterval; 

当的水平结束时,该控制器被dealloc'd和释放。以前,我得到一个崩溃后该控制器被释放了,因为我没有零出去UIAccelerometer委托(即,它仍在发送事件到现在已经被释放的对象)。所以,现在,里面的dealloc的,我这样做是:

UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = nil;

所有都很好和第一水平起着顺利。当我到一个新的水平,创造了一个新台阶控制器和再次运行首批代码(现在设置新位指示为代表)的问题发生。在此之后,我没有从加速度计得到任何来电。

所以,问题是,你只允许有每一个应用程序为代表的加速度,还是我只是失去了一些东西?我没有在不允许设置了多次委托的文档见过。我稍微新的OBJ-C,但据我了解这代表不应该太非正统的。

注:我知道,在3.0我可以听摇通知。不幸的是,我需要别的东西要第一个响应的全部时间,我感兴趣的抖动。所以我不能只是重构该选项。

有帮助吗?

解决方案

在一般情况下,具有代表对象具有仅一次一个。除非另有记载,不应该有超过一个特定实例的生命周期设置多于一个的不同的对象为代表的任何限制。

我不知道发生了什么事是的之后的您设置的第二控制器作为加速器代表你的第一个控制器被dealloced。你看了与调试代码,以确保一切都在为了发生你期待?

其他提示

一个可能的解决方案将是具有不同的类,也许应用程序委托,充当UIAccelerometer的委托,并具有当它接收到accelerometer:didAccelerate:消息类定制发送NSNotification。当你发现你关心加速的类型或者你可以每次发送通知和包括UIAcceleration放慢参数作为通知userInfo的一部分,你既可以只发送消息。你的控制器有兴趣的加速度数据根据需要可为通知注册。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top