Nella vista principale della mia app ho una vista tabella e due celle prototipo. Ho configurato i segues per ogni cella usando lo storyboard. Nel controller della vista, sovrascrivo prepareForSegue per passare le informazioni sulla cella selezionata alla vista di destinazione.iOS si blocca per molti secondi prima di mostrare una nuova vista
La vista di destinazione non è particolarmente complessa e certamente non richiede alcuna elaborazione pesante da caricare.
PROBLEMA
Quando si tocca su una cella del controller principale per la prima volta, la vista di destinazione appare dopo un lungo ritardo, da 5 a 40 secondi.
EDIT # 2: rubinetti successivi sono generalmente più veloci
Nota che:
- Se si tocca sullo stesso cellulare nuovo prima è apparsa la vista di destinazione, questo innesca la vista di destinazione apparire immediatamente.
- Come sopra, ma toccando una cella diversa, la vista viene visualizzata immediatamente ma con i dati della prima cella.
- Come sopra, ma toccando un controllo diverso (senza sequenze associate), la vista di destinazione viene immediatamente visualizzata.
- I "tocchi" successivi generalmente manifestano meno ritardo.
- Il Time Profiler - per quello che posso vedere - mostra che assolutamente nulla sta accadendo durante quei molti secondi di ritardo.
- ho cercato diverso tipo di segues, ma fatto differenza
mostra Alcuni di println che la seguente sequenza di eventi si verifica:
- nella vista principale, prepareForSegue viene eseguito (senza ritardi)
- poi il viewDidLoad destinazione viene eseguito (senza ritardi)
- ... lungo ritardo ...
- il punto di vista di raccolta e tabella nel des avviare il controller di tinga invocando i metodi relativi all'origine dati per recuperare i dati dal controller. appare
- la vista infine (con un'animazione indesiderato, BTW, ma questo è un problema diverso)
Da quello che ho letto su questo argomento, ho il sospetto che il problema è potenzialmente legato ad alcune delle sopra le operazioni che si verificano in un thread in background.
Qualche idea su cosa potrei fare male?
EDIT # 1: aggiunto un certo codice
Nel regolatore di vista principale le segues sono stati collegamento mediante la story board (CTRL-trascinare le due cellule prototipo nella vista di destinazione).
Il codice sembra un po 'come di seguito:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
var assetIndex = assetsTable.indexPathForSelectedRow()?.row
println("prepare for segue - start: \(assets[assetIds[assetIndex!]]!.Name)")
if let destination = segue.destinationViewController as? AssetThingsListViewController
{
destination.bundlesRepository = bundlesRepository!
destination.asset = assets[assetIds[assetIndex!]]
}
println("prepare for segue - end")
}
EDIT # 3 ho fatto un progetto di esempio disponibile sul BitBucket
Penso che questo sia un bug. Avevo sempre questo successo anche a me ogni volta che facevo un seguito per la prima volta. Iniziato con iOS 8. –
Hai provato a eseguire l'app in modalità di rilascio? Immagino che vedrai questo comportamento solo in modalità di debug. –
Sfortunatamente continua anche in modalità di rilascio. –