gpt4 book ai didi

iphone - 导致崩溃的通知监听器

转载 作者:可可西里 更新时间:2023-11-01 05:47:15 24 4
gpt4 key购买 nike

我正在使用以下代码来检测/监听 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 的每一个微小的倾斜和移动,这显然经常发生在人的手中(而不是平放在 table 上)。

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

*更新:这个监听器是在我的 UIImageView 子类中创建的。屏幕上大约有十几个或更多。我已将 [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; 添加到我删除实例时的删除方法中。这有助于解释为什么 didRotate 一直出现这么多(我的错误)。

但是,我已经缩小了崩溃的范围:每当我删除这个子类的一个实例并旋转我的 iPad 时,我就会崩溃。有时我会收到奇怪的消息,例如 [__NSArrayM didRotate]: is unrecognized selector(以及其他奇怪的对象,如 UIPanVelocity ……之类的)。删除实例后我的监听器是否仍在监听?

已修复:感谢您的帮助。我终于注意到出了什么问题。我在不删除观察者和结束通知的情况下删除实例。将以下代码添加到我的实例删除方法中可以解决我的问题:

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

最佳答案

我猜你会反复添加观察者并且永远不会删除它们。这意味着同一入口点可能会为单个事件调用多次。这也意味着当“self”对象消失时,您会崩溃。

关于iphone - 导致崩溃的通知监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8887851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com