EXC_BAD_ACCESS, когда popViewController: анимация в навигационном приложении - PullRequest
4 голосов
/ 08 декабря 2010

Я не могу понять, почему у меня происходит сбой при возврате к предыдущему контроллеру представления в стеке навигации. Дело в том, что я использую пользовательскую панель навигации (оригинал скрыт, а мои пользовательские кнопки вместо этого запускают навигацию - push и pop).

Трассировка получаю:

Program received signal:  “EXC_BAD_ACCESS”.

#0  0x011a4a60 in objc_msgSend
#1  0x0044e37c in -[UIImageView(UIImageViewInternal) _canDrawContent]
#2  0x003bf3df in -[UIView(Internal) _didMoveFromWindow:toWindow:]
#3  0x003bf1b0 in -[UIView(Internal) _didMoveFromWindow:toWindow:]
#4  0x003bf1b0 in -[UIView(Internal) _didMoveFromWindow:toWindow:]
#5  0x003bdfc4 in -[UIView(Hierarchy) _postMovedFromSuperview:]
#6  0x003b6dfc in -[UIView(Internal) _addSubview:positioned:relativeTo:]
#7  0x003b514f in -[UIView(Hierarchy) addSubview:]
#8  0x005ca471 in -[UINavigationTransitionView transition:fromView:toView:]
#9  0x005c9ed5 in -[UINavigationTransitionView transition:toView:]
#10 0x0043c606 in -[UINavigationController _startDeferredTransitionIfNeeded]
#11 0x0043c292 in -[UINavigationController _popViewControllerWithTransition:allowPoppingLast:]
#12 0x0043bfa9 in -[UINavigationController popViewControllerWithTransition:]
#13 0x0043f62b in -[UINavigationController popToViewController:transition:]
#14 0x000124fa in -[BaseViewController bottomNavigationFiredController:] at BaseViewController.m:187

Ответы [ 2 ]

3 голосов
/ 17 декабря 2010

Стоит помнить, что когда viewcontroller отодвигается в стеке навигации (новый контроллер представления вставляется), даже если он сам не освобождается (сохранил его в стеке контроллера навигации), отображается его основное отображениевыпущен (со всеми его подпредставлениями, конечно) thou.

Таким образом, этот тип сбоя будет в основном указывать на часть пользовательского интерфейса управления памятью (наиболее вероятно двойной выпуск автоматически выпущенных UIImages, который был моим случаем ;-).

Надеюсь, это поможет кому-то понять, как UINavigationController управляет памятью.

2 голосов
/ 08 декабря 2010

Я столкнулся с той же проблемой, которая могла возникнуть из-за того, что ваше последнее представление больше не сохраняется. Лучшим способом может быть попытка сохранить ваше предыдущее представление путем создания свойства и его синтеза.

Тогда попробуйте использовать

[self.navigationConroller popViewControllerAnimated:YES];

или для перехода к нужному виду

[self.navigationController popToViewController:myview animated:YES];

или чтобы перейти к rootview

[self.navigationController popToRootViewControllerAnimated:YES];

Дайте мне знать, если это поможет вам. Поскольку эта ошибка возникает, когда вы пытаетесь перейти к просмотру, которое уже было выпущено.

...