1

我对 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”

4

1 回答 1

0

我通过以下方式解决了这个问题:

a) 在此处使用教程:

http://timneill.net/2010/09/modal-view-controller-example-part-1/

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

于 2012-05-01T19:56:22.910 回答