Неужели эта ошибка проявляется все время или она проявляется тогда и только тогда, когда вы начинаете прокручивать левый край и отменить его? Причина, по которой я спрашиваю, заключается в том, что мы использовали код, предполагающий, что viewWillAppear
предыдущего VC и viewWillDisappear
текущего будут всегда предшествовать viewDidAppear
и viewDidDisappear
соответственно. Но это уже не так с интерактивными переходами, потому что viewWillAppear
/Disappear
будет вызываться, когда вы начнете переход, но соответствующий viewDidAppear
/Disappear
не может быть, если интерактивный переход отменен. Фактически, при представлении этой концепции на WWDC 2013, ведущий шутил, что они должны переименовать viewWillAppear
в «viewMightAppear
, или viewWillProbablyAppear
, или iReallyWishThisViewWouldAppear
».
Итак, посмотрите на свои методы и убедитесь, что у вас ничего нет, что зависит от того, что на самом деле появляется и исчезает, потому что, если жест отменен, вы не увидите эти события.
Для получения дополнительной информации см. Видео WWDC 2013 Custom Transitions Using View Controllers. Интерактивные переходы обсуждаются чуть более чем наполовину через видео. В нем обсуждается, как реализовать свои собственные интерактивные переходы, но эти концепции применимы к встроенному левому краю навигационного контроллера.
В стандартном "назад" процесс кнопки, выскакивают из второго контроллера представления к первому, последовательность событий является типичным:
SecondViewController.viewWillDisappear
FirstViewController.viewWillAppear
SecondViewController.viewDidDisappear
FirstViewController.viewDidAppear
Но если вы начинаете левый край салфетки жест и пауза, последовательность событий:
SecondViewController.viewWillDisappear
FirstViewController.viewWillAppear
Но если остановить жест и отменить переход, вместо того, чтобы видеть SecondViewController.viewDidDisappear
и FirstViewController.viewDidAppear
, вы увидите следующие события:
FirstViewController.viewWillDisappear
FirstViewController.viewDidDisappear
SecondViewController.viewWillAppear
SecondViewController.viewDidAppear
В зависимости от того, что вы делаете в этих различных «появляются» родственных методов, вы можете иметь проблемы, если это не сделано правильно. Например, если вы делаете очистку в viewWillDisappear
, убедитесь, что вы только очищаете вещи, которые вы установили в viewWillAppear
. Или если вы делаете что-либо в viewDidAppear
, убедитесь, что у вас не будет проблем, если этот метод будет вызван снова, если интерактивный переход будет отменен. Невозможно сказать, что именно не так в вашей ситуации, без информации о том, что вы делаете в этих связанных с явлениями методах.
Но суть в том, что вам просто нужно убедиться, что приложение не делает никаких предположений, что только потому, что начался переход, что он обязательно закончится.
Нам потребуется гораздо больше деталей, чем только это. Что происходит именно так? Что вы видите в отличие от левого края и задней кнопки? Можете ли вы показать какой-то код, связанный с ошибкой (сформируйте оба связанных диспетчера представлений). –
Одно из отличий заключается в том, что левый край - это интерактивный переход, например. пользователь может контролировать скорость и направление - перемещение назад и усилие, а также может отменять переход, а нажатие на кнопку возврата - нет. – almas