2011-01-09 4 views
0

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

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

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

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

ответ

2

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

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.)

+0

После того, как я добавил свойство (неатомное, удержание), как вы упомянули, я должен поставить себя. перед первым контролером? или просто когда я начинаю его, как вы показали? –

+0

всегда использует self infront, если вы обращаетесь к свойствам. Потому что, если вы используете что-то вроде '@synthesize firstController = _firstController', то базовый ivar для свойства будет _firstController not firstController; Это, в свою очередь, означает, что firstController без self будет недопустимой ссылкой. – mackross

+0

Я также сохраняю значения в самом делете приложения, и каждый контроллер представления запросит appDel для этой информации перед тем, как сделать действие. Мне нужно снова подключить отношения в коде после работы release/init? –