In der Hauptansicht meiner App habe ich eine Tabellenansicht und zwei Prototyp-Zellen. Ich habe die Übergänge für jede Zelle mit dem Storyboard konfiguriert. Im View-Controller überschreibe ich prepareForSegue, um Informationen über die ausgewählte Zelle an die Zielansicht zu übergeben.iOS-Segment für viele Sekunden einfrieren, bevor neue Ansicht angezeigt wird
Die Zielansicht ist nicht besonders komplex und erfordert sicher keine schwere Verarbeitung zum Laden.
DAS PROBLEM
Wenn ich in der Hauptsteuerung für das erste Mal auf einer Zelle tippen, wird die Zielansicht nach einer langen Verzögerung, von 5 bis 40 Sekunden.
EDIT # 2: nachfolgenden Taps sind in der Regel schneller
Beachten Sie, dass:
- Wenn ich auf der gleichen Zelle tippen Sie erneut vor die Zielansicht erschienen ist, dies die Zielansicht auslöst sofort erscheinen.
- Wie oben, aber das Tippen auf eine andere Zelle führt dazu, dass die Ansicht sofort erscheint, aber mit den Daten aus der ersten Zelle.
- Wie oben, aber das Antippen eines anderen Steuerelements (ohne zugeordnete Segmente) löst die sofortige Anzeige der Zielansicht aus.
- Nachfolgende "Taps" weisen im Allgemeinen weniger Verzögerung auf.
- Der Time Profiler - für das, was ich sehen kann - zeigt, dass während dieser vielen Sekunden Verzögerung absolut nichts passiert.
- ich verschiedene Arten von segues versucht, aber es machte keinen Unterschied
Eine Show wenig println, die die folgende Sequenz von Ereignissen:
- in der Hauptansicht wird prepareForSegue ausgeführt (keine Verzögerungen)
- dann das Ziel viewDidLoad ausgeführt (keine Verzögerungen)
- ... lange Verzögerung ...
- die Sammlung und Tabellenansichten des in den tination Controller startet den Aufruf der datenquellenbezogenen Methoden, um die Daten vom Controller zu holen.
- der Blick erscheint schließlich (mit einer unerwünschten Animation, BTW, aber das ist ein anderes Problem)
Von dem, was ich zu diesem Thema gelesen habe, vermute ich das Problem möglicherweise auf einige der in Beziehung steht über Operationen in einem Hintergrundthread.
Irgendeine Idee, was ich falsch machen könnte?
EDIT # 1: hinzugefügt einige Code
in der Hauptansicht-Controller haben die segues gewesen Link, um die Storyboard (CTRL-Drag die beiden Prototyp-Zellen in die Zielansicht) verwenden.
Der Code sieht ein bisschen wie folgt:
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 ich ein Beispielprojekt auf zur Verfügung gestellt haben BitBucket
Ich denke, das ist ein Fehler. Das passierte mir jedes Mal, wenn ich zum ersten Mal eine Überfahrt machte. Beginne mit iOS 8. –
Hast du versucht, die App im Freigabemodus auszuführen? Ich schätze, Sie werden dieses Verhalten nur im Debug-Modus sehen. –
Leider passiert es auch weiterhin im Freigabemodus. –