2015-09-18 5 views
7

Ho aggiornato la mia app Swift a Xcode 7/Swift 2.0 e ora improvvisamente alcuni passaggi nella mia app non funzionano più.Xcode 7 - Alcuni follower non funzionano più

Ho un seguito che fa apparire una modale "Check In" e funziona perfettamente, ma poi ho un altro seguito che fa apparire una modale "Check Out" che è quasi identica e non si avvia e l'app è bloccata.

Ho ricreato il seguito da zero, ho confermato che è identico a quello di "Archiviazione" e non funziona ancora.

Inoltre, ho provato a lanciare una vista vuota al posto della mia modalità Check Out e funziona perfettamente.

Non ci sono errori, si blocca solo, ho confermato che la parte "prepareForSegue" viene chiamata correttamente ma la parte "viewDidLoad" della mia modal non viene invocata.

FYI, Ho il layout automatico disattivato.

+3

Vedere questa domanda qui: http://stackoverflow.com/questions/32549020/app-frozen-by-uikit-after-upgrading-to-xcode-7/32549072#32549072 – Yaroslav

+0

Perfetto, questo è esattamente quello che io sto vedendo Grazie @ Yaroslav –

risposta

8

Il tuo modellino "Check Out" ha un UITextView? In tal caso, c'è un bug in Xcode 7/iOS9 in cui non è possibile avviare una modal (o una qualsiasi vista root) che contiene un UITextView se è stato impostato un valore di testo predefinito nello storyboard.

Una soluzione è assicurarsi che UITextView nello storyboard sia vuoto o che abbia il valore predefinito di Lorem Ipsem e invece, impostare il testo in codice nel codice su viewDidLoad.

Speriamo che questo errore venga risolto a breve.

+4

Puoi lasciare UITextView ma rimuovere il testo e funziona. Vedi questo: http://stackoverflow.com/questions/32549020/app-frozen-by-uikit-after-upgrading-to-xcode-7/32549072#32549072 – Yaroslav

+0

@ Yaroslav, grazie, correggerò la mia risposta. –

+0

Aveva faticato per risolvere questo problema nelle ultime 2 settimane. Non ho aggiornato il mio altro Mac, mantenuto Xcode 6, per continuare a lavorare su app in swift1.2. Perché questo bug non è ancora stato risolto? – Sahil

1

Sospetto che ci sia un loop infinito da qualche parte nel codice del controller "Check Out". Prova a mettere in pausa l'app nel debugger dopo aver presentato il controller (quando si blocca) e controllare lo stacktrace. Se non aiuta, prova a commentare il codice riga per riga in viewDidLoad e viewWillAppear per trovare la linea che causa il blocco.

+0

viewDidLoad non viene mai richiamato. La cosa di UITextView sopra ha risolto il mio problema. Grazie per il suggerimento. –

1

Ho avuto questo problema, provare con questo

dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("Storyboard Id") 
      self.presentViewController(viewController, animated: true, completion: nil) 
     }) 

Non vi resta che dare un id storyboard nella vista e normalmente sta funzionando.

1

La mia app funzionava perfettamente su iOS8. Il suo flusso è stato:

VC: View Controller, NVC: Navigazione View Controller, ER: rapporto radice Incastonato tra NVC e VC, PS: spingere Segue, PG: presentazione Programmatico

NVC1 --- (ER) - > VC1 --- (PS) -> NVC2 --- (ER) -> VC2 e così via.

Il problema era che VC1- (PS) -> NVC2 seguito non funzionava, non c'era il blocco. vc1.prepareForSegue() è stato eseguito, ma VC2 non è stato presentato. Ho sperimentato e ho scoperto che non avevo il problema UITextView menzionato qui. Seguendo il pangrattato riportate qui di seguito, ho ottenuto il lavoro dopo ore di tentativi nel modo seguente (codice alla fine): NVC1 --- (ER) -> VC1 --- (PG) -> VC2

Ecco i passaggi: Come menzionato in Segue issue in iOS9, più NVC sono fuori moda (vergogna su Apple per abbandonare improvvisamente ciò che è effettivamente consigliato nel tuo tutorial online e fare app rompersi!). Così ho modificato NVC1 --- (ER) -> VC1 - (PS) -> VC2 mentre VC2 era ancora incorporato in NVC2. Ho ricevuto degli errori simili allo StackOverflow post on view not in hierarchy.Quindi ho iniziato a eseguire la transizione a livello di codice e dopo aver affrontato present vs. push ViewController issue che risulta nel messaggio "tried to push modally on active view controller" e quindi ViewController lifecycle issues che risultano nei messaggi "Unbalanced calls to begin/end appearance transactions", ho ottenuto il seguente codice funzionante. Sulla base di questa esperienza, penso che Apple dovrebbe aver lasciato una cosa da sola nell'aggiornamento Xcode7/iOS9.

//*********** VC1.swift. A translation of working code 

    class VC1:UIViewController{ 
    private var viewController2:VC2? 
    private var showVC2: Bool = false 
    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 
     if(showVC2) { 
      showVC2 = false 
      self.pushVC2() 
     } 
    }//viewWillAppear 


    private var info:String? // info from incoming user action. 
    @IBAction unwindToVC1FromUserAction(incomingSegue: UIStoryboardSegue?) { 
    // Do app-specific stuff to get info from incomingSegue and 
    // store in self.info variables. 
    let myboard: UIStoryBoard = self.storyboard!; 
    self.viewController2 = myboard.instantiateViewControllerWithIdentifier(
        "VC2 Storyboard ID") as! VC2 
    self.prepareVC2() // Pass info to VC2.info, stuff you would have done in prepareForSegue 
    showVC2= true 
    } //unwind 

    private func prepareVC2() { 
     self.viewController2.info = self.info // etc.. 
    } 

    private func pushVC2() { 
     self.navigationController!.pushViewController(viewController2!, animated:false) 
    } 
} //class 
0

Ho avuto questo, ma non era nessuno dei precedenti. La mia chiamata successiva è avvenuta all'interno di un blocco. Quando ho spostato la chiamata sul thread principale, ho visto che avevo un errore "NSUnknownKeyException" nel nuovo controller di visualizzazione. Essere all'interno del blocco sembrava impedire all'errore di registrarsi in Xcode, quindi l'app sembrava appesa senza errori.

Una volta risolto il problema, il codice originale funzionava correttamente.