iPhone Entwicklung - Meine Anwendung stürzt ab, wenn ich die Ausrichtung zu ändern

StackOverflow https://stackoverflow.com/questions/475911

  •  19-08-2019
  •  | 
  •  

Frage

Ich bin stoßen in dieses Problem, wo meine Anwendung EXC_BAD_ACCESS Fehler und stuck bekommt / stoppt. Ich verwende „Nach links drehen“ und „Nach rechts drehen“ Optionen des Simulator der Orientierungsänderung Verhalten zu simulieren. Was kann die möglichen Gründe für diesen Fehler sein? Da ich keine Details über den Fehler bekommen, kann ich es nicht verfolgen.

Alle meine Controller-Klassen haben:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationPortrait);    // Return YES for supported orientations
}

Alle Ideen, Zeiger? Danke.


Aber mein Code hat keinen Aufruf [UIDevice setOrientation:]. Methode

Dies ist die Spur, die ich im Debug-Fenster:

objc_msgSend
-[UIWindow _handleDeviceOrientationChange:]
_nsnote_callback
__CFXNotificationPost
_CFXNotificationPostNotification
-[NSNotificationCenter postNotificationName:object:userInfo:]
-[UIDevice setOrientation:]
-[UIApplication handleEvent:withNewEvent:]
_[UIApplication sendEvent:]
_UIApplicationHandleEvent 
SendEvent
PurpleEventTimerCallBack
CFRunLoopRunSpecific
CFRunLookRunInMode
GSEventRunModel
GSEventRun
-[UIApplication _run]
UIApplicationMain
main

Beachten Sie, dass der Fehler angezeigt wird, wenn meine Ansicht eine Tab-Leiste enthält. Da niemand antworten, ich denke das ist nicht ein häufiges Problem, und ich kann keine Ressourcen- dieses Problem finden.

  

Kann ich sagen, irgendwie meiner Anwendung in einzelner Ausrichtung (Hochformat) laufen, und keine Ereignisse für Orientierungsänderung senden.? Dies könnte mein Problem lösen, aber das ist die alternative, die ich suche.


Danke Paul, Ihr Kommentar war hilfreich, und ich war in der Lage, das Problem aber mit den Kosten der Haltespeicher für die Ansicht zu beheben ich brauche nicht. Hier ist, was passiert:

Ich habe einen Blick (Ansicht A), die eine andere Ansicht (Ansicht B) eröffnet. App Delegate Methode ist für beide Ansicht A und Ansicht B. Anwendung Öffnen nicht stürzt auf Ansicht A. I Ansicht A entfernen aus dem Fenster, und lassen Sie es Controller-Objekt, und View B zum Fenster hinzufügen. Ich glaube, das ist, wo ich etwas falsch tue. Können Sie mir mit dem Code helfen?

Hier ist der Code für die Freigabe Ansicht A und Öffnung View B:

- (void)openViewB {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:window cache:YES];

    // Remove viewControllerA from the window's view
    [window removeFromSuperview];

    // !-- Commenting out this block fixes the issue --!
    // Release memory wired for viewControllerA view
    if(viewControllerA) {
        [viewControllerA release];
        viewControllerA = nil;
    }       

    // We call window:addSubView to add the viewB to the main window. 
    // You can use this call to add other views as child views not only to windows
    // but to other views as well. (UIWindow is a subclass of UIView).
    [window addSubview:viewControllerB.view];
    [UIView commitAnimations];

    // Override point for customization after application launch
    [window makeKeyAndVisible];
}

Ich begann die Anwendung mit Tableiste Anwendungsvorlage und viewControllerB ist vom Typ UITabBarController. Ich mache auf jeden Fall etwas falsch hier. Alle Zeiger?

War es hilfreich?

Lösung

Es ist nicht ungewöhnlich in der Systembibliothek Code zum Absturz wegen etwas, das man nicht ganz richtig ist eingerichtet. Dies könnte sein, dass Ihr UIWindow oder deren Inhalt Ansicht oder Instanz Ihre View-Controller nicht beibehalten wurde oder bekam irgendwie freigegeben.

Die shouldrotate Methode wird nicht helfen, wenn Ihr Controller immer noch nicht da ist.

rpetrich Vorschläge noch nützlich sein können, zu identifizieren, welches Objekt wurde freigegeben.

Für besonders heikle Probleme, könnten Sie Release hinzufügen, behalten und dealloc Methoden (das Protokoll und rufen Super-) zu einer verdächtigen Klasse von Ihnen und sehen, was es freigegeben wird. Melden Sie die -retaincount Kurs zu halten (ich dies nur verwenden für diagnostische Zwecke, nicht die Speicherverwaltung in einem Versand App zu tun).

Andere Tipps

einen Haltepunkt auf -[UIDevice setOrientation:] Set und im Debugger durch den Code Schritt.

Um Debugging bei erleichtern, können Sie call (void)instrumentObjcMessageSends(YES) direkt im Debugger-Konsole geben Protokollierung objc_msgSends auf / tmp /, dann continue Ausführung zu beginnen und es wird alle Nachrichten verfolgen, die direkt bis zum Absturz gesendet werden.

ich konfrontiert zu dem gleichen Problem, ich denke, wenn die Viewcontroller freigegeben wird mit [Viewcontroller release], aber immer noch der Ansicht mit und von dieser Zeit, wenn Sie die Änderung der Orientierung der Anwendung abstürzt.

Sie haben, genau herauszufinden, wann sollten Sie die Viewcontroller release [propably an der Ausfahrt].

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top