0

我剛剛跟蹤了我在iOS應用程序中遇到的崩潰,它與在viewWillAppear之前調用willAnimateRotationToInterfaceOrientation有關。willAnimateRotationToInterfaceOrientation被稱爲BEFORE viewWillAppear

我有一個應用程序與兩個意見。基本上,當view1消失時,我釋放一些數組,假設它們在viewWillAppear中重新出現時將被重新初始化。但是,如果我在view2中更改方向,然後切換回view1,則會導致willAnimateRotationToInterfaceOrientation在view1調用viewWillAppear並重新初始化所有內容並導致崩潰之前發生。

有什麼辦法可以延遲willAnimateRotationToInterfaceOrientation,直到視圖出現並且所有的東西都被重新初始化了嗎?

如果不是這樣,我可以看到的唯一解決方案是不使用willAnimateRotationToInterfaceOrientation(這會導致難看的方向更改),或者在從view1切換到view2時導致使用的內存不足,從而無法釋放數據。

有沒有人對我應該做什麼有任何想法?

回答

1

您可以使用延遲加載代碼風格避免你的問題,如:

NSArray* someData; 


-(void)somefun1{ 

    if (!someData) { 

     [self loadData]; 
    } 

    //use your data 
} 

-(void)somefun2{ 

    if (!someData) { 

    [self loadData]; 
    } 

    //use your data 

} 

-(void)loadData{ 
    //some loading code 
} 

使用延遲加載代碼風格,你永遠需要主意事件調用順序。

+0

謝謝,這是有道理的,但我怎麼知道我的數組是否已被重新初始化?我嘗試瞭如果(!myArray)和if(myArray = nil)和if([myArray count] == 0),但在數組被釋放之前以及重新定義之前似乎沒有任何工作。 該數組在@interface中定義,因爲它的範圍應該是整個類,然後它在viewDidAppar中初始化,然後在viewWillDissappear中釋放。現在在這種方向改變的情況下,我需要找到一種方法來判斷它是否已經發布。全局布爾值可以工作,但這不是很優雅。 – Jackson 2010-12-20 14:40:17

+0

好吧,我有一個想法。我應該釋放,然後設置我的數據數組爲零,所以我可以稍後檢查它是否等於零,否則重新初始化它? – Jackson 2010-12-20 15:08:22