2015-05-05 13 views
6

Questo mi ha bloccato per un po 'di tempo. Ho uno UISplitViewController all'interno di uno UITabBarController. La vista principale è un TableView. Quando clicco su una cella, faccio apparire un controller di visualizzazione molto semplice con solo un UIButton centrato. Ecco il codice per il controller di visualizzazione:Swift Chiamate sbilanciate per iniziare/terminare transizioni di apparenza per

class TestViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 
    @IBOutlet weak var button: UIButton! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @IBAction func buttonPressed(sender: AnyObject) { 
     let pickerC = UIImagePickerController() 
     pickerC.delegate = self 

     pickerC.modalPresentationStyle = .Popover 
     pickerC.popoverPresentationController?.sourceView = button as UIView 
     pickerC.popoverPresentationController?.sourceRect = (button as UIView).bounds 
     pickerC.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.Any 
     self.presentViewController(pickerC, animated: true, completion: nil)//4 
    } 

    func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) { 
     self.dismissViewControllerAnimated(true, completion: nil) 
    } 

    func imagePickerControllerDidCancel(picker: UIImagePickerController) { 
     self.dismissViewControllerAnimated(true, completion: nil) 
    } 
} 

Se si fa clic su Annulla o seleziona e immagine, il controller di selezione si chiude correttamente. Il problema nasce quando clicco sul pulsante Indietro per tornare alla TableView, ricevo:

Unbalanced calls to begin/end appearance transitions for <TestViewController: 0x7fb882a72380>. 

Il TestViewController è molto semplice, quindi perché questo sarebbe accadendo?

+0

Quando si ritorna a 'tableView', forse' tableView' ha tentato di presentare nuovamente questo vc? – Schemetrical

risposta

7

Questo problema si verifica se si tenta di inviare un nuovo controller di visualizzazione mentre la transazione precedente (animazione) è in corso. Quindi controlla il flusso del codice e apporta le modifiche appropriate. Controlla le tue dimissioni e visualizza le animazioni della vista. È possibile utilizzare setAnimation struttura al 'SI/NO'resolve questo Set

animato: NO, può essere possibile risolvere il problema

+5

Grazie per l'aiuto. Stranamente mi ha aiutato a rintracciare il problema, che era nel metodo viewDidAppear di UITabBarController, mi mancava la linea: super.viewDidAppear (animato). –

1

Per me questo problema strano stava accadendo a causa di seguente riga dopo l'attuazione della UISplitViewController

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
. 
. 
. 
    // splitViewController.preferredDisplayMode = .PrimaryOverlay 
. 
. 
. 
    } 

Commentando questa riga nel problema didFinishLaunchingWithOptions è stato risolto.