Three20:通过TTNavigator恢复时未调用loadView和viewDidLoad

时间:2011-07-12 16:16:47

标签: ios uikit three20

当使用Three20框架时,我对TTNavigator的工作方式有疑问。如果在applicationDidFinishLaunching中,我使用以下命令恢复应用程序的先前状态:

TTNavigator* navigator = [TTNavigator navigator];
navigator.persistenceMode = TTNavigatorPersistenceModeAll;
navigator.window = self.window;
[navigator restoreViewControllers];

刚刚恢复的ViewController的方法loadView和viewDidLoad永远不会被调用。怎么会这样呢?

这是一个错误还是设计?

如果是设计,那将是一个很好的解决方案。我的问题是我希望ViewController加载它的笔尖。我已经看到了其他的变通方法,但是它们很难看并且有外部组件(比如app委托代替视图控制器本身)加载nib,我想避免。这些丑陋的解决方法的示例在随附Three20源代码的TTNibDemo示例中给出。

2 个答案:

答案 0 :(得分:0)

这取决于你调用viewController的方式,在viewWillAppear中尝试,应该可行。

答案 1 :(得分:0)

你在设备上测试吗?

  

navigator.window = self.window;   _ [navigator restoreViewControllers];

在设备上,第一个屏幕始终是第一个屏幕,而在模拟器上并非如此,您应该始终检查条件

if(![navigator restoreViewControllers])
  // do this
else 
  TTNavigationController* navi = [[((MyViewController1*)[navigator topViewController]) viewControllers] objectAtIndex:0];