8

Meine UISplitViewController funktioniert im Grunde wie ein Charme, außer dass es eine ärgerliche Fehlermeldung angezeigt wird beim ersten Wechsel (nur das erste Mal!) Von der Master-Tabellenansicht in die Detailansicht.Unsymmetrische Aufrufe zu Beginn/Ende Aussehen Übergänge in UISplitViewController

Unbalanced calls to begin/end appearance transitions for <UINavigationController: 0x160015600>. 

Sowohl der Master und die Detailansicht-Controller in einem UINavigationController eingebettet. Allerdings tritt der Fehler nur dann, wenn die folgende Einstellung (die logische Verhalten auf dem iPhone erforderlich ist):

class MySplitViewController: UISplitViewController, UISplitViewControllerDelegate { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.delegate = self 
    } 

    func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool { 
     return true 
    } 
} 

Es wäre toll, wenn jemand eine Lösung für dieses Problem, Dank im Voraus zur Verfügung stellen könnte.

BTW: die geteilte Ansicht Controller wurde im Storyboard

Vorstellung der Detailansicht Steuerung erfolgt in der tableView:didSelectRowAtIndexPath: Methode wie folgt aufgebaut:

if let detailViewController = delegate as? DetailViewController { 
    detailViewController.navigationItem.leftItemsSupplementBackButton = true 
    detailViewController.navigationItem.leftBarButtonItem = splitViewController!.displayModeButtonItem() 
    splitViewController!.showDetailViewController(detailViewController.navigationController!, sender: self) 
} 
+0

die gleiche Frage, die sich während alles bauen programmatisch als auch segue statt showDetailViewController ausführen verwenden. Ich nehme an, ob es auf Storyboard oder programmatisch geschieht, tritt dieses Problem auf. – user1046037

+0

Verweisen Sie - http://cdn3.raywenderlich.com/wp-content/uploads/2015/05/MathMonsters-Swift-Final.zip und fügen Sie dann den 'func splitViewController hinzu (splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool {return true} ' – user1046037

+0

Probieren Sie es auf dem iPhone aus – user1046037

Antwort

2

Wahrscheinlich Ihr erster Übergang vom Master (UITableView in UIViewController?) Zum Detail (UIViewController) Ansicht in Ihrem UISplitViewController startet, bevor die aktive/aktuelle Ansicht hat sich selbst angezeigt.

Ein möglicher Grund dafür ist, dass Sie möglicherweise versuchen, die erste "Instanz" der Detailansicht in der viewDidLoad() Methode von Ihnen Master UIViewController zu präsentieren? In einem solchen Fall könnte Ihre App versuchen, die Detailansicht vor der Masteransicht zu präsentieren, die erscheint. Beachten Sie den Unterschied hier zwischen Ansicht haben Last eine Ansicht und Ansicht erschien:

Überschreibung func viewDidLoad()

Beschreibung:

aufgerufen, nachdem die Ansicht der Controller in den Speicher geladen.

Diese Methode wird aufgerufen, nachdem der View-Controller seine Ansicht in den Speicher geladen hat.


Überschreibung func viewDidAppear (animiert: bool)

Beschreibung:

Teilt dem View-Controller, der seine Hinblick auf eine Hierarchie Ansicht hinzugefügt wurde. Sie können diese Methode überschreiben, um zusätzliche Aufgaben durchzuführen, die mit dem Anzeigen der Sicht verbunden sind.

Jetzt, da Sie nicht zeigen, die Frage, wie Sie Ihre erste Detailansicht laden, wird die folgenden Ratschläge vielleicht schon selbst beachtet, aber trotzdem: Wenn Ihre Detailansicht aus den viewDidLoad() präsentiert wird, versuchen, dies zu bewegen zum viewDidAppear() Methode:

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(true) 

    // present/load detail view here instead 
} 
+0

Entschuldigung für die Unklarheiten, wenn ich den Detailansicht-Controller präsentiere, schau dir die bearbeitete Frage an. Trotzdem, danke für deine Mühe, das habe ich gelesen, bevor ich diese Frage gestellt habe, aber ich kann mir nicht vorstellen, wie meine Anwendung das macht. – borchero

+0

@OliverBorchert Hmm, dann ohne eine detailliertere Ansicht deines Codes, weiß ich nicht wirklich. Ist es möglich, einige Transitionen zu einem bestimmten Zeitpunkt im ersten Statuswechsel in Details zu animieren? ('Animation: ...'). Wenn ja, setzen Sie solche Animationen möglicherweise auf "false" zum Testen, wenn sie der Grund für Ihren Fehler sind (dh Überlagerungen verursachen). – dfri

+0

Ich habe wirklich nur den Split View Controller in meiner Anwendung:/ – borchero

0

Dies könnte zu spät eine Antwort sein, aber irgendwie, ich löste diese

+0

'showDetailViewController' hat einen speziellen Zweck in einem' UISplitViewController', den es abhängig von den Größenklassen (adaptiv) schiebt/präsentiert. Daher ist es besser, 'showDetailViewController' zu verwenden, aber das scheint ein Problem zu sein – user1046037