0

Je viens de retrouver un crash que j'avais dans mon application iOS et il est lié à willAnimateRotationToInterfaceOrientation étant appelé avant viewWillAppear.willAnimateRotationToInterfaceOrientation étant appelé BEFORE viewWillAppear

J'ai une application avec deux vues. Fondamentalement, lorsque view1 disparaît, je libère des tableaux, en supposant qu'ils seront ré-initialisés quand ils apparaîtront dans viewWillAppear.

Cependant, si je change d'orientation dans view2 puis que je retourne à view1, cela provoque willAnimateRotationToInterfaceOrientation avant que view1 ait appelé viewWillAppear et ait tout ré-initialisé, ce qui provoque un plantage.

Y at-il un moyen de retarder willAnimateRotationToInterfaceOrientation jusqu'à ce que la vue soit apparue et que tout ait été réinitialisé? Si ce n'est pas le cas, les seules solutions que je peux voir n'utilisent pas willAnimateRotationToInterfaceOrientation (ce qui entraîne une modification d'orientation laide) ou ne libèrent pas mes données lorsque je passe de view1 à view2, ce qui nécessite plus de mémoire que nécessaire.

Quelqu'un a-t-il des idées sur ce que je devrais faire?

Répondre

1

Vous pouvez utiliser le code de style de chargement paresseux éviter votre problème, comme:

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 
} 

utilisez le code de style de chargement paresseux que vous ne avez besoin événement esprit d'appeler l'ordre.

+0

Merci, c'est logique, mais comment savoir si ma baie a été réinitialisée ou non? J'ai essayé if (! MyArray) et if (myArray = nil) et if ([myArray count] == ​​0) mais aucun d'entre eux ne semble fonctionner après que le tableau a été libéré et avant qu'il ait été redéfini. Le tableau a été défini dans @interface car sa portée est supposée être la classe entière, puis il est initialisé dans viewDidAppar, puis libéré dans viewWillDissappear. Maintenant, dans le cas de ce changement d'orientation, je dois trouver un moyen de dire si elle a été libérée ou non. Un booléen global pourrait fonctionner mais ce n'est pas très élégant. – Jackson

+0

Ok, j'ai une idée. Est-ce que je devrais libérer et alors mettre mon tableau de données à zéro, ainsi je peux vérifier plus tard s'il est égal à zéro, sinon le réinitialiser? – Jackson

Questions connexes