iphone – 通知侦听器导致崩溃

前端之家收集整理的这篇文章主要介绍了iphone – 通知侦听器导致崩溃前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用以下代码来检测/侦听iPad何时更改设备方向.

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];   
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didRotate:)
                                                 name:@"UIDeviceOrientationDidChangeNotification" 
                                               object:nil];

当事情发生变化时,这会调用我的didRotate:方法.在我的didRotate:方法中,我使用UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];找出方向是什么,并相应地应用我的代码.

然而,在现实生活测试中,我注意到如果iPad在一个人的手中,则每秒都会调用didRotate :.听起来似乎是倾听iPad中的每一个小倾斜和移位,这显然在一个人的手中发生了很多(而不是在桌子上平放).

关于如何解决这个问题的任何想法?我可以更改我的代码以使用界面方向,但无论出于何种原因我都遇到了麻烦.谢谢.

* UPDATE:这个监听器是在我的UIImageView子类中创建的.屏幕上有十几个或更多.我添加了[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];删除实例的删除方法.这有助于解释为什么didRotate会出现这么多(我的错误).

但是,我已经缩小了崩溃:每当我删除这个子类的一个实例,然后旋转我的iPad时,我就崩溃了.有时我得到像[__NSArrayM didRotate]这样奇怪的消息:是无法识别的选择器(以及其他像UIPanVelocity这样的奇怪对象……).删除实例后,我的监听器是否仍在侦听?

固定:谢谢你的帮助.我终于发现了什么是错的.我删除了实例而没有删除观察者并结束通知.在我的实例删除方法添加以下代码可以解决我的问题:

[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] removeObserver:self];

解决方法

我猜你反复添加观察者并且从不删除它们.这意味着可以针对单个事件多次调用相同的入口点.这也意味着当“自我”对象消失时,你会崩溃.

猜你在找的Xcode相关文章