为什么将以下代码从Old更改为New条目解决了以下问题。为什么这个不同的“addSubView”代码导致行为上的差异
代码:
我使用一个UINavigationController,有一个“MAINVIEW”的UITableViewController,然后一个2级视图我推到了:当我使用旧代码
// OLD Entry - Did not work //[self.window addSubview:navigationController.view]; // NEW Entry - Fixed it self.window.rootViewController = self.navigationController;
问题我们把它称为“detailedView”UITableViewController。
浏览正常的备份和从主到的详细信息转发工作正常
但是当启动时自动运行到第二视图(我保存状态)我得到第二视图OK,但工具栏按钮做在这种情况下,不会出现在第二个视图的底部。当我回到主页面时(通过UINavigationController标准配置),然后选择UITableView中的行,再次返回到相同的视图中,工具栏项目显示正常。
无法追踪这个问题,但最终通过试验和错误我注意到在appDelegate(所有地方)的代码(见上文)中的这种变化似乎解决了这个问题。
任何想法?
编辑:为了完整这里是完整的方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
RootViewController *rootViewController = (RootViewController *)[navigationController topViewController];
NSManagedObjectContext *context = [self managedObjectContext];
if (!context) {
abort(); // TODO: Do better job here than abort
}
rootViewController.managedObjectContext = context;
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
编辑2:哦,我有一个NIB文件,并在界面生成器的根视图控制器/窗口设置 - 所以我想知道如果我在这里混合了NIB和编程方法,这可能会导致问题?编辑3:还注意到,当我添加“self.window.rootViewController = self.navigationController”行时,以下didFinishLaunchingWithOptions代码工作。这没有这条线(这是Coredat书的例子),我得到的问题。
RootViewController *rootViewController = (RootViewController *)[navigationController topViewController];
rootViewController.managedObjectContext = self.managedObjectContext;
self.window.rootViewController = self.navigationController; // WORKS WHEN I ADD THIS LINE IN FOR SOME REASON???
// Configure and show the window
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
return YES;
如何在重新启动时导航到第二个视图控制器? – nielsbot 2011-05-10 22:42:56