Как я могу перезагрузить контроллеры представления из appDelegate каждый раз, когда я помещаю один в стек? - PullRequest
0 голосов
/ 09 января 2011

В настоящее время мое приложение имеет один экран навигации, который позволяет пользователю выбирать другие виды.При нажатии navController просто нажимает на соответствующий контроллер представления.Это прекрасно работает, если я никогда не вернусь к тому же представлению, ожидая, что оно будет перезагружено.

В приведенном ниже коде я нажимаю контроллер представления при запросе.

- (void)optionClicked:(NSString *)optionName
{
  if ([@"First" isEqualToString:optionName]) {
    [navController pushViewController:firstController animated:YES];
  } else if ([@"Next" isEqualToString:optionName]) {
    [navController pushViewController:nextController animated:YES];
  }
}

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

1 Ответ

2 голосов
/ 09 января 2011

Вы должны повторно инициализировать viewcontroller.

  if ([@"First" isEqualToString:optionName]) {
    if (firstController) 
    { [firstController release]; } // assuming you've got a retain on it.
    firstController = [[MyViewControllerSubclass alloc] init];
    [navController pushViewController:firstController animated:YES];
  } 

В этой ситуации я бы предложил использовать свойство с удержанием на нем. @property (nonatomic, retain) MyViewControllerSubclass *firstController;

Таким образом, вы можете использовать self.firstController = [[[MyViewControllerSubclass alloc] init] autorelease];, и управление памятью в основном выполняется для вас. (Хотя вам еще нужно выпустить в dealloc.)

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