8

Il mio UISplitViewController funziona fondamentalmente come un incantesimo tranne che è presente un fastidioso messaggio di errore visualizzato durante la transizione la prima volta (solo prima volta!) Dalla vista tabella principale alla vista dettagli.Chiamate sbilanciate per iniziare/terminare transizioni di apparenza in UISplitViewController

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

Sia il master e il controller vista di dettaglio sono incorporati in un UINavigationController. Tuttavia, l'errore si verifica solo quando si imposta la seguente (che è necessaria per il comportamento logico su iPhone):

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 
    } 
} 

Sarebbe grande se qualcuno potrebbe fornire una soluzione a questo problema, grazie in anticipo.

BTW: il controller della vista scissione è stata costituita nello storyboard

Presentando il controller vista di dettaglio è fatto nel metodo tableView:didSelectRowAtIndexPath: in questo modo:

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

fronte lo stesso problema, mentre la costruzione tutto programmaticamente pure. Quindi suppongo che sia fatto su storyboard o programmaticamente, questo problema si verifica. – user1046037

+0

Refer - http://cdn3.raywenderlich.com/wp-content/uploads/2015/05/MathMonsters-Swift-Final.zip e quindi aggiungi 'func splitViewController (splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, suPrimaryViewController primaryViewController: UIViewController) -> Bool {return true} ' – user1046037

+0

Provalo su iPhone – user1046037

risposta

2

Molto probabilmente, il primo passaggio da master (UITableView in UIViewController?) Per visualizzare il dettaglio (UIViewController) nel proprio UISplitViewController si avvia prima che la vista attiva/corrente abbia terminato di essere visualizzata.

Un possibile motivo per questo è che si sta tentando di presentare la prima "istanza" della vista di dettaglio nel metodo viewDidLoad() del master UIViewController? In tal caso, l'app potrebbe provare a presentare la vista di dettaglio prima che la vista principale finisca di apparire. Si noti la differenza qui tra vista è stato caricato una vista e vista sembravano:

esclusione func viewDidLoad()

Descrizione:

Chiamato dopo la vista del controller è caricato in memoria.

Questo metodo viene chiamato dopo che il controller di visualizzazione ha caricato la sua gerarchia di vista nella memoria.


esclusione func viewDidAppear (animato: Bool)

Descrizione:

notifica al controller della vista che la sua vista inserito in una visione gerarchia. È possibile sovrascrivere questo metodo per eseguire attività aggiuntive associate alla presentazione della vista.

Ora, come si mette in discussione non mostra come si carica la tua visualizzazione iniziale dettaglio, i seguenti consigli è forse già ascoltato da soli, ma in ogni caso: se la vostra vista di dettaglio è presentato dal viewDidLoad(), cercare di spostare questo al metodo viewDidAppear():

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

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

Mi dispiace per non aver chiarito quando presento il controller della vista di dettaglio, controlla la domanda modificata. Comunque, grazie per il tuo impegno, questo è quello che avevo letto prima di fare questa domanda, tuttavia non riesco a pensare a come la mia applicazione sta facendo questo. – borchero

+0

@OliverBorchert Hmm, quindi senza una vista più dettagliata del tuo codice, non lo so davvero. È possibile animare qualche transizione ad un certo punto nel primo cambiamento di stato in dettaglio? ('animazione: ...'). Se è così, è possibile impostare tali animazioni su 'false' per testare se sono la ragione del tuo errore (cioè, causando transizioni di sovrapposizione) – dfri

+0

Ho davvero solo il controller della vista divisa nella mia applicazione:/ – borchero

0

questo potrebbe essere troppo tardi una risposta, ma in ogni modo, ho risolto questo usando eseguire segue invece di showDetailViewController

+0

'showDetailViewController' ha uno scopo speciale in un' UISplitViewController' che spinge/presenta in base alle classi di dimensione (adattivo). Quindi è meglio usare 'showDetailViewController', ma questo sembra essere un problema – user1046037

Problemi correlati