每次在堆栈上推送视图控制器时,如何从appDelegate重新加载视图控制器?

时间:2011-01-09 14:36:17

标签: objective-c uinavigationcontroller

目前,我的应用程序有一个导航屏幕,允许用户选择其他视图。单击时,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 个答案:

答案 0 :(得分:2)

您必须重新初始化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中发布。)