Ios 从另一个UIViewController内部显示UIViewController?

Ios 从另一个UIViewController内部显示UIViewController?,ios,uiviewcontroller,Ios,Uiviewcontroller,我对iOS非常陌生,正在尝试从另一个视图控制器中显示视图控制器,如下所述: 见第三个答案 而且 我从这个开始。我打开MyViewController.m并修改updateString方法,最后添加以下代码: { // Get the application's "window" UIWindow *window = [UIApplication sharedApplication].keyWindow; // Get the window's rootVi

我对iOS非常陌生,正在尝试从另一个视图控制器中显示视图控制器,如下所述:

见第三个答案

而且

我从这个开始。我打开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 loaded”名称为“HighScore”

但是,如果我将final语句更改为使用rootViewController而不是self,那么什么也不会发生。没有例外,但也没有显示新视图

问题:

1为什么我的笔尖无法加载?我显然做错了什么

2为什么使用rootViewController而不是self会产生不同的结果?rootViewController不应该找到与self相同的类吗


请注意,当使用rootViewController时,我在XCode中得到一个警告:MyViewController“可能不响应”-presentViewController:animated:completion

我通过以下方法解决了此问题:

a在此处使用教程:


b右键单击并获取XCode项目中.xib文件的信息,并将其类型修改为file.xib而不是sourcecode.xib。如果没有第二次更改,它将无法加载!奇怪的但这最终是问题所在

NIB文件名已正确输入initWithNibName:@HighScore,请检查您是否确定项目中的HighScore.xib文件。。。!是的,如上所述,它位于项目和复制包资源部分,并且名称正确。