0

Ich habe gerade einen Absturz festgestellt, den ich in meiner iOS-App hatte und der damit in Verbindung steht, dass willAnimateRotationToInterfaceOrientation vor viewWillAppear aufgerufen wird.willAnimateRotationToInterfaceOrientation wird aufgerufen VOR viewWillAppear

Ich habe eine App mit zwei Ansichten. Im Grunde, wenn view1 verschwindet, gebe ich einige Arrays frei, vorausgesetzt, sie werden neu initialisiert, wenn sie in viewWillAppear wieder erscheinen.

Wenn ich jedoch die Ausrichtung in view2 ändere, dann wechsle zurück zu view1, dies verursacht willAnimateRotationToInterfaceOrientation, bevor view1 viewWillAppear aufgerufen und alles neu initialisiert hat und dies einen Absturz verursacht.

Gibt es eine Möglichkeit, willAnimateRotationToInterfaceOrientation zu verzögern, bis die Ansicht erscheint und alles neu initialisiert wurde? Wenn nicht, sind die einzigen Lösungen, die ich sehen kann, entweder die Verwendung von willAnimateRotationToInterfaceOrientation (was zu einer hässlich aussehenden Orientierungsänderung führt) oder die Freigabe meiner Daten beim Wechsel von view1 zu view2, was dazu führt, dass mehr Speicher benötigt wird.

Hat jemand irgendwelche Gedanken darüber, was ich tun soll?

Antwort

1

können Sie verwenden faul-Laden Artcode Ihr Problem vermeiden, wie:

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 
} 

Verwendung faul-Laden Artcode Sie Geist Ereignis nie um anrufen müssen.

+0

Danke, das macht Sinn, aber wie kann ich feststellen, ob mein Array neu initialisiert wurde oder nicht? Ich probierte if (! MyArray) und if (myArray = nil) und if ([myArray count] == ​​0), aber keine davon scheint zu funktionieren, nachdem das Array freigegeben wurde und bevor es neu definiert wurde. Das Array wurde in @interface definiert, da der Bereich die gesamte Klasse sein soll, dann wird es in viewDidAppar initialisiert und dann in viewWillDissappear freigegeben. Jetzt muss ich bei dieser Orientierungsänderung herausfinden, ob sie freigegeben wurde oder nicht. Ein globaler Boolean könnte funktionieren, aber das ist nicht sehr elegant. – Jackson

+0

Ok ich habe eine Idee. Sollte ich mein Daten-Array freigeben und DANN auf Null setzen, so kann ich später prüfen, ob es gleich Null ist, sonst reinitialisieren Sie es? – Jackson