加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

iphone – 通知侦听器导致崩溃

发布时间:2020-12-14 17:30:20 所属栏目:百科 来源:网络整理
导读:我正在使用以下代码来检测/侦听iPad何时更改设备方向. [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:@"UIDeviceOrientationDi
我正在使用以下代码来检测/侦听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];

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读