Проблема стека контроллера навигации после предупреждения о памяти - PullRequest
0 голосов
/ 05 февраля 2012

Я использую UINavigationController в моей программе, когда я нахожусь на четвертом или пятом контроллере в стеке навигации, программа получает предупреждение о памяти, и я не могу вернуться назад.Я нажимаю кнопку «Назад», анимация панели навигации происходит, но контроллер не отображается, я все еще вижу старый вид.Может ли кто-нибудь помочь мне справиться с этой проблемой?

Мои подпредставления имеют свойство:

@property (nonatomic,retain) UITableView *searchTableView;
@property (nonatomic,retain) UISegmentedControl *categorySegmentedControl;
@property (nonatomic,retain) UISearchBar *searchTableBar;
@property (nonatomic,retain) UIView *footerView;
@property (nonatomic,retain) UINavigationItem *navigationItem;

Мой метод viewDidUnload

- (void)viewDidUnload
{
  [super viewDidUnload];
  self.searchTableView = nil;
  self.categorySegmentedControl = nil;
  self.searchTableBar = nil;
  self.navigationItem = nil;
  self.footerView = nil;
}

Мой dealloc

-(void)dealloc
{
  [super dealloc];
  [searchTableView release];
  [categorySegmentedControl release];
  [searchTableBar release];
  [navigationItem release];
  [footerView release];
  [currentValues release];
}

И я заметил странную закономерность - эта ошибка появляется, только когда я перехожу из режима просмотра без панели вкладок в режим просмотра с панелью вкладок.

1 Ответ

1 голос
/ 05 февраля 2012

Похоже, что вы, возможно, делаете некоторые настройки в viewDidLoad вашего контроллера и / или выпускаете вещи в viewDidUnload, которые должны быть выполнены в initWithNibName: bundle и dealloc.

viewDidLoad и viewDidUnload не вызываются, когда ваш контроллерсоздается и уничтожается, они вызываются, когда представление внутри вашего контроллера создается и уничтожается, и это может произойти в любое время, особенно если вы получаете предупреждение памяти, когда контроллер представления находится в фоновом режиме (например, не вид сверху вконтроллер навигации).

Убедитесь, что вы пишете свои контроллеры таким образом, чтобы при вызове viewDidUnload или при многократном вызове viewDidLoad вы не теряли данные и ничего не ломали.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...