2010-08-10 59 views
1

有沒有辦法知道一個視圖控制器是-viewWillAppear-viewWillDisappear之間的視圖控制器生命週期的某個地方?知道何時-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]; 

有沒有一種簡單的方法來做到這一點?

+0

大衛,你爲什麼要使用一個計時器來選擇註釋,而不是立即選擇呢? – Itay 2010-08-10 23:59:19

+0

因爲註釋是動畫化他們的下降,意味着如果一個人立即選擇一個註釋,它的召喚是可見的,因爲它落在地圖上。看起來有點奇怪,恕我直言! – 2010-08-11 06:06:24

+0

我同意。你可以在'mapView:didAddAnnotationViews:'中做選擇 - 只需設置一個布爾值來表示它需要選擇第一個布爾值,然後一旦添加它們就會被選中。 (我有類似的問題) – Itay 2010-08-11 18:23:49

回答

1

自己的方式似乎是最簡單的方法,如果不是最強大的。 (簡單地檢查該視圖的實例是否存在似乎是正確的方法(如果它還沒有被處理))。

我也實在不明白這樣做的目的,除非你有運行,涉及到視圖控制器被發現,你正在使用的布爾方法的另一個視圖控制器。在那種情況下,它的設計問題比保養問題更多。

+0

我可以理解,我描述的這種方式可能會導致任何人相信我有嚴重的設計問題。基本上,我有一個MKMapView,它使用NSTimer在第二秒後自動選擇第一個註釋。問題在於,很多事情可能在第二時間發生,包括從屏幕上刪除或完全釋放的視圖。不幸的是,當視圖消失時在NSTimer上調用'invalidate'不夠健壯,因爲NSTimer偶爾會在一秒之前觸發,導致'消息被髮送到釋放的實例'。 – 2010-08-10 22:21:02

+0

啊我看到了,好像你已經用盡了其他的可能性,你的方式似乎是一個很好的解決方案。 – 2010-08-10 22:22:09

0

使用viewDidDisappear

- (void)viewDidDisappear:(BOOL)animated { 
    // Do stuff that has to be done when this view is off screen. 
} 
+0

恐怕我可能一直不清楚。當視圖不在屏幕上時,我不想做任何事情,當屏幕上顯示視圖或不想從屏幕上移除視圖時,我想做些事情。出於這個原因,我設置'isOnScreen'當視圖控制器會出現真正的(在'doSomething'方法是好的,被稱爲),並將其設置錯誤時,視圖控制器會消失(該方法不能再被稱爲直到視圖即將重新出現)。 – 2010-08-10 21:54:29

相關問題