【发布时间】:2010-08-10 21:14:44
【问题描述】:
有没有办法知道视图控制器在 -viewWillAppear 和 -viewWillDisappear 之间的视图控制器生命周期中的某个位置?
我问是因为我想确定当我的视图不在屏幕上或即将从屏幕上消失时不会触发方法。当视图即将从屏幕上消失时,我无法在运行时明确检查的某些对象可能会或可能不会被释放,因此,与它们交互显然会导致message sent to deallocated instance 错误。
目前,我正在跟踪BOOL,如下所示:
- (void)viewWillAppear:(BOOL)animated {
isOnScreen = YES;
[super viewWillAppear:animated];
}
- (void)willWillDisappear:(BOOL)animated {
isOnScreen = NO;
[super viewWillAppear:animated];
}
我的方法是这样的:
if (isOnScreen) [self doSomething];
有没有更简单的方法来做到这一点?
【问题讨论】:
-
大卫,你为什么使用计时器来选择注释而不是立即选择它?
-
因为注释正在动画它们的下降,这意味着如果一个人立即选择一个注释,它的标注在它下降到地图上时是可见的。看起来有点奇怪,恕我直言!
-
我同意。您可以在
mapView:didAddAnnotationViews:中进行选择 - 只需设置一个布尔值,表示它需要选择第一个,然后一旦添加它们,它们就会被选中。 (我也有类似的问题) -
mapView:didAddAnnotationViews:正是我开始NSTimer的地方。不幸的是,mapView:didAddAnnotationViews:在动画完成之前触发——大约在三分之一秒之前,根据我的计算。根据文档,mapView:didAddAnnotationViews:“告诉代理一个或多个注释视图已添加到地图中。”不幸的是,如果您为 drop 设置动画,它不会延迟。 -
这是一个与我们正在讨论的内容直接相关的 SO 答案:stackoverflow.com/questions/1256875/…。你会注意到,那个家伙和我一样解决了这个问题。不幸的是,从表面上看,如果地图出现,他的代码就会崩溃,然后很快就会被释放。这正是我试图用上面的代码来防止的。
标签: iphone objective-c cocoa-touch ipad