В главном представлении моего приложения у меня есть представление в виде таблицы и две ячейки прототипа. Я настроил segues для каждой ячейки, используя раскадровку. В контроллере представления я переопределяю prepareForSegue для передачи информации о выбранной ячейке в вид назначения.iOS segue заморозить в течение многих секунд, прежде чем показывать новый вид
Вид назначения не является особо сложным и, конечно же, не требует тяжелой обработки для загрузки.
ПРОБЛЕМА
Когда я нажмите на ячейку в главном контроллере для самого первого раза, вид назначения появляется после длительной задержки, от 5 до 40 секунд.
EDIT # 2: последующие краны, как правило, быстрее
Обратите внимание, что:
- Если я нажимаю на той же клетке снова перед тем появился вид назначения, это вызывает вид назначения немедленно появиться.
- Как и выше, но нажатие на другую ячейку приводит к тому, что представление появляется сразу же, но с данными из первой ячейки.
- Как указано выше, но нажатие на другой элемент управления (без соответствующих сегментов) вызывает немедленное отображение вида назначения.
- Последующие «краны» обычно проявляют меньшую задержку.
- Time Profiler - для того, что я вижу - показывает, что абсолютно ничего не происходит в течение тех многих секунд задержки.
- Я попробовал другой тип перетекает, но это не имеет никакого значения
показывает несколько Println, что следующая последовательность событий:
- в главном окне, prepareForSegue выполняется (без задержек) не
- того viewDidLoad назначения выполняется (без задержки)
- ... Длительная задержка ...
- мнения сбора и таблиц в дезе tination controller запускает методы, связанные с источником данных, для извлечения данных из контроллера. наконец, появляется
- вида (с нежелательной анимацией, кстати, но это другая проблема)
Из того, что я читал на эту тему, я подозреваю, что проблема потенциально связана с некоторыми из выше операций, происходящих в фоновом потоке.
Любая идея, что я могу делать неправильно?
EDIT # 1: добавил код
В главном контроллере представления на перетекает была ссылка с помощью раскадровки (CTRL-перетащить два прототип ячеек в режим назначения).
код выглядит как ниже:
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 я сделал образец проекта доступны на BitBucket
Я думаю, что это ошибка. Раньше я это случалось со мной, и каждый раз, когда я делал сегу в первый раз. Началось с iOS 8. –
Вы пытались запустить приложение в режиме выпуска? Я предполагаю, что вы увидите это поведение только в режиме отладки. –
К сожалению, это также происходит в режиме выпуска. –