Seltsamer Absturz beim Entfernen von View-Controller, Auto-Layout zu beschuldigen?

8

Ich habe einen sehr merkwürdigen Absturz, hier ist das Backtrace.

%Vor%

Sie werden feststellen, dass Frame 25 der einzige Aufruf ist, den mein Code macht, und es ist cancelButtonTouched , das aussieht.

%Vor%

Ich bin ratlos, was vor sich geht. Ich hatte noch nie ein Problem wie dieses. Aufgrund der Systemaufrufe scheint es sich um ein Problem mit dem automatischen Layout zu handeln. Ich habe überprüft, dass viewWillApper auf dem presenting view controller vor dem Absturz aufgerufen wird, also nehme ich an, es ist eine Ausgabe während des Layouts der präsentierenden Ansicht.

Irgendwelche Ideen, wie Sie dieses Problem auf eine bestimmte Layouteinschränkung reduzieren können? Oder irgendwelche anderen Ideen?

Dies ist auf einigen Geräten reproduzierbar, wo es selten passiert. So ist es intermittierend.

Aktualisieren

Screenshot des Haltepunkts.

Update 2

Es ist also definitiv ein Problem mit der presentingViewController ablehnen, zwei tiefe Ebenen ( [self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil] ) ablehnen funktioniert gut, aber offensichtlich nicht das gewünschte Ergebnis, ich möchte nur 1 Ebene zurückgehen. Dies führt mich weiter zu der Annahme, dass es ein Problem gibt, das die Sichtweise "neu legt".

    
Chris Wagner 26.03.2013, 00:43
quelle

4 Antworten

4

Nach einer Idee von Carl Lindberg habe ich die folgende iOS Kategorie vorbereitet und benutzt und habe keinen Absturz mehr:

UIView + AddSubviewWithRemovingFromParent.h

%Vor%

UIView + AddSubviewWithRemovingFromParent.m

%Vor%

Jetzt können Sie die addSubviewWithRemovingFromParent-Methode verwenden, um die subView anstelle der addSubview-Methode wie folgt hinzuzufügen:

%Vor%

Um es zusammenzufassen:

  1. finden Sie alle Referenzen von addSubView in Ihren Controllern, wo die App stürzt ab
  2. importieren Sie die Kategorie UIView + AddSubviewWithRemovingFromParent.h
  3. Verwenden Sie die Methode addSubviewWithRemovingFromParent anstelle von addSubView
ljboy 06.11.2013, 17:02
quelle
7

Ich erinnere mich an so etwas, obwohl ich nicht sicher war, ob es genau dasselbe war. In meinem Fall wurde es durch den Aufruf von addSubview verursacht: (oder insertSubview: ...) mit einer Sicht, die bereits eine Unteransicht war. Während ich normalerweise denke, dass UIView damit umgeht, scheint es mit dem automatischen Layout möglich zu sein, dass einige zugehörige Informationen an anderer Stelle zweimal hinzugefügt werden, und es kann zu einem Absturz kommen, wenn versucht wird, die zugehörigen Informationen zu bereinigen. In meinem Fall bestand die Lösung darin, sicherzustellen, dass ich nur Subviews hinzufügte, und dieser Absturz (oder mein ähnlicher sowieso) ging weg.

    
Carl Lindberg 17.05.2013 18:46
quelle
1

In meinem Fall passierte dieser Absturz, als ich einen View-Controller in einem Storyboard hatte, aber den Inhalt der Ansicht von einer NIB mit demselben View-Controller wie der Dateieigner geladen hatte. Das funktioniert normalerweise gut, aber ich habe die view -Ausgabe sowohl im Storyboard als auch in der NIB gesetzt, was den iOS6-Fehler "add subview double" ausgelöst hat. Durch Löschen der View-Outlet in der NIB wurde alles behoben.

    
phatmann 07.05.2014 20:56
quelle
0

Ich hatte / habe das gleiche Problem.
Das gleiche Problem tritt auf, wenn ich zwei View-Controller modal über einander präsentiere und zur ersten zurückkehren möchte. Das Deaktivieren des automatischen Layouts für die erste dargestellte Ansicht löst das Problem für mich.
In Ihrem Fall self.presentingviewcontroller
Leider konnte ich es nicht weiter eingrenzen.

    
Simon D. 30.07.2013 10:13
quelle

Tags und Links