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