应用程序窗口应在应用程序启动警告结束时具有根视图控制器

时间:2012-07-17 03:56:26

标签: objective-c ios ios5 uiviewcontroller

我已经被这个警告困住了好几个小时了。我一直在寻找答案,尝试了我找到的所有答案,但找不到解决办法。这是我所拥有的代码的破败,Xcode默认生成了这个代码。

这是我的AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

我在main.m上有这个(根据this answer

int main(int argc, char *argv[])
{
    @autoreleasepool {
        int retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
        return retVal;
    }
}

我还正确连接了MainWindow.xib中的所有连接。所以我现在不知所措。我可能遗失的任何东西?提前谢谢!

4 个答案:

答案 0 :(得分:19)

如果您有rootViewController,则在application:didFinishLaunchingWithOptions:设置窗口MainWindow.xib很奇怪。通常,项目遵循以下三个模板中的一个:

  • 有些项目有MainWindow.xib。目标的“主界面”在目标的“摘要”选项卡(或其Info.plist)中设置为“MainWindow”。此xib的文件所有者为UIApplication。 xib包含AppDelegate的实例,连接到文件所有者的delegate插座。 xib还包含UIWindow,其rootViewController出口连接到UIViewController(或子类,例如UINavigationController),它也位于xib中。当应用程序委托收到application:didFinishLaunchingWithOptions:消息时,xib被完全加载,因此窗口及其根视图控制器已经设置好。

  • 其他项目没有MainWindow.xib。目标的“主界面”为空。相反,UIApplicationMain函数会创建AppDelegate的实例,将其设置为UIApplication的委托,并向其发送application:didFinishLaunchingWithOptions:消息。应用程序委托通过创建UIWindow,创建视图控制器(或多个)以及设置窗口的rootViewController属性来处理该消息。默认版本如下所示:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
        self.window.rootViewController = self.viewController;
        [self.window makeKeyAndVisible];
        return YES;
    }
    
  • 有些项目有MainStoryboard.storyboard。我不打算详细描述这一点,因为它似乎与您的问题无关。

你所描述的问题让你觉得你使用的是第一个模板的一半,第二个模板的一半。那不行。你需要决定你正在采取哪种方法,然后全押。

答案 1 :(得分:2)

您可以打开xib文件并右键单击占位符中的“文件所有者”。如果视图未连接到View插槽,则按住“Ctrl”键并拖动鼠标右键进行设计,然后再次运行^^(不要拖动到特定控件,当出现边框视图时拖动到背景设计)。

答案 2 :(得分:1)

我有这条消息,因为我在我的RootViewController @property(弱,非原子)IBOutlet UIView * loadView ; 和viewDidLoad被调用了两次......将其重命名为其他内容......

答案 3 :(得分:0)

我已在项目中解决问题,请按照以下步骤解决问题..

1)打开主视图控制器nib文件,在appDelegate中引用该文件     eg.ViewCotroller.xib

2)在nib文件上检查视图连接,如果没有连接到文件所有者,则连接它。

3)现在运行项目。