8

Мой UISplitViewController в основном работает как шарм, за исключением того, что появляется сообщение об ошибке, которое отображается при первом переходе (только в первый раз!) Из представления главной таблицы в подробное представление.Неуравновешенные вызовы для перехода на начало/конец в UISplitViewController

Unbalanced calls to begin/end appearance transitions for <UINavigationController: 0x160015600>. 

И хозяин, и контроллер подробного вида встроены в UINavigationController. Однако, эта ошибка возникает только при установке следующего (что необходимо для логического поведения на iPhone):

class MySplitViewController: UISplitViewController, UISplitViewControllerDelegate { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.delegate = self 
    } 

    func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool { 
     return true 
    } 
} 

Было бы здорово, если бы кто-нибудь могли бы обеспечить решение этой проблемы, заранее спасибо.

КСТАТИ: контроллер сплит вид был создан в раскадровке

Представляя контроллер детальный вид делается в методе tableView:didSelectRowAtIndexPath: так:

if let detailViewController = delegate as? DetailViewController { 
    detailViewController.navigationItem.leftItemsSupplementBackButton = true 
    detailViewController.navigationItem.leftBarButtonItem = splitViewController!.displayModeButtonItem() 
    splitViewController!.showDetailViewController(detailViewController.navigationController!, sender: self) 
} 
+0

Облицовочные тот же вопрос при строительстве все программно, а также. Поэтому я предполагаю, что это делается на раскадровке или программно, эта проблема возникает. – user1046037

+0

Refer - http://cdn3.raywenderlich.com/wp-content/uploads/2015/05/MathMonsters-Swift-Final.zip, а затем добавить 'func splitViewController (splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, onPrimaryViewController primaryViewController: UIViewController) -> Bool {return true} ' – user1046037

+0

Попробуйте на iPhone – user1046037

ответ

2

Скорее всего, ваш первый переход от хозяина (UITableView в UIViewController?) К деталям (UIViewController) вид в вашем UISplitViewController начинается до того, как будет отображаться активный/текущий вид.

Возможная причина в том, что вы, возможно, пытаетесь представить первый «экземпляр» подробного представления в методе viewDidLoad() вашего хозяина UIViewController? В таком случае приложение может попытаться представить подробный вид перед завершением основного вида. Обратите внимание на разницу здесь между зрением сделали нагрузку вида и вид действительно появлялись:

переопределения функ viewDidLoad()

Описание:

Вызывается после точки зрения контроллера является загружается в память.

Этот метод вызывается после того, как контроллер вида имеет загрузил свой вид иерархия в память.


переопределение FUNC viewDidAppear (анимированное: Bool)

Описание:

Уведомляет контроллер представления, что его вид был добавлен к виду иерархии. Вы можете переопределить этот метод для выполнения дополнительных задач , связанных с представлением представления.

Теперь, когда вы вопрос не показывает, как вы загрузите первоначальный вид детали, следующий совет, возможно, уже прислушались сами, но в любом случае: если ваша точка зрения подробно представлена ​​от viewDidLoad(), попробуйте переместить этот к viewDidAppear() метода:

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(true) 

    // present/load detail view here instead 
} 
+0

Извините, что не уточняю, когда я представляю контроллер подробного представления, ознакомьтесь с отредактированным вопросом. Тем не менее, спасибо за ваши усилия, это то, что я прочитал, прежде чем задавать этот вопрос, но я не могу придумать, как мое приложение это делает. – borchero

+0

@OliverBorchert Хм, тогда без более детального просмотра вашего кода я действительно не знаю. Вы можете анимировать какой-то переход в какой-то момент в первом изменении состояния до детали? ('animation: ...'). Если это так, возможно, установите такие анимации на 'false' для тестирования, если они являются причиной вашей ошибки (т. Е. Вызывают перекрывающиеся переходы) – dfri

+0

У меня действительно только контроллер разделенного представления в моем приложении:/ – borchero

0

Это может быть слишком поздно ответ, но в любом случае, я решил эту проблему с помощью выполнения SEGUE вместо showDetailViewController

+0

'showDetailViewController' имеет определенную цель в' UISplitViewController', он толкает/представляет в зависимости от классов размера (адаптивного). Поэтому лучше использовать 'showDetailViewController', но это, похоже, проблема – user1046037

Смежные вопросы

 Смежные вопросы