1

在我的应用程序中,我获取用户位置并执行反向地理编码。同时用户可以写笔记。有时,当我调试和运行我的应用程序时,我会收到以下消息:

*** -[MyViewController respondsToSelector:]: message sent to deallocated instance 0x61a6920

我没有成功解决这个问题,但我注意到禁用地理定位问题并没有出现(至少直到现在)。所以我认为,当地理定位开启时,反向地理编码器(一个单独的线程)可以在控制器已经被释放时返回。有可能吗?如果是这样,怎么可能避免呢?

谢谢,

弗兰

4

1 回答 1

3

对于像反向地理编码这样的异步过程,委托完全有可能(实际上,一个相当常见的错误)从该过程中解除分配。发生这种情况时,(在这种情况下)地理编码器将愉快地在已释放的委托对象上调用其委托方法,就像您所看到的一样。

这就是为什么MKReverseGeocoder有一个-cancel方法。您想-(void)dealloc在用作地理编码器委托的类中调用它。也许还将您的地理编码器的委托设置为nil.

这很可能意味着您需要向该类添加一个命名/综合属性,以保持地理编码器的句柄。这样您就必须在您的 dealloc 方法中说“取消” TO。

于 2011-01-28T13:15:33.173 回答