我对 iOS 还很陌生,我正在尝试从另一个视图控制器中呈现一个视图控制器,如此处所述:
堆栈溢出答案(见第三个答案)
也在苹果的网站上
我从Hello World 示例代码开始。我打开 MyViewController.m 并修改 updateString() 方法,将这段代码添加到末尾:
{
// Get the application's "window"
UIWindow *window = [UIApplication sharedApplication].keyWindow;
// Get the window's rootViewController (NOTE: Only works on iOS 4.0 or later!)
UIViewController *rootViewController = window.rootViewController;
// Create our new controller
UIViewController *enterNameController = [[UIViewController alloc] initWithNibName:@"HighScore" bundle:[NSBundle mainBundle]];
if (enterNameController != NULL)
{
printf("\nLoaded UIView controller. Installing as actionSheetController...\n\n");
UINavigationController *navigationController = [[UINavigationController alloc]
initWithRootViewController:enterNameController];
// Present out Enter Name for High Score view as a modal view
// [rootViewController presentViewController:navigationController animated:YES]; // iOS 2.0 and newer
[self presentViewController:navigationController animated:YES completion: nil]; // iOS 5.0 and newer
}
}
我还创建了一个名为“HighScore.xib”的 NIB 文件,我将它与 HelloWorld 附带的其他 NIB 文件放在一起,并将 HighScore.xib 添加到 XCode 项目中,并将其拖到“复制捆绑资源”部分.
按原样,在运行并将文本输入编辑字段时出现错误:
*由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法在包中加载 NIB:“NSBundle(已加载)”,名称为“HighScore”
但是,如果我将最后的语句更改为使用“rootViewController”而不是“self”,那么什么也不会发生。也不例外,但也没有提出新的观点。
问题:
1) 为什么我的笔尖无法加载?我显然在这里做错了什么。
2)为什么使用“rootViewController”而不是“self”会产生不同的结果?rootViewController 不应该找到与“self”相同的类吗?
请注意,当使用“rootViewController”时,我在 XCode 中收到警告:“MyViewController”可能无法响应“-presentViewController:animated:completion”