预计应用程序在应用程序启动结束时将具有一个根视图控制器


383

我在控制台中收到以下错误:

预计应用程序在应用程序启动结束时将具有一个根视图控制器

下面是我的application:didFinishLaunchWithOptions方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Set Background Color/Pattern
    self.window.backgroundColor = [UIColor blackColor];
    self.tabBarController.tabBar.backgroundColor = [UIColor clearColor];
    //self.window.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"testbg.png"]];

    // Set StatusBar Color
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];

    // Add the tab bar controller's current view as a subview of the window
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}

在Interface Builder中,UITabBarController的委托与应用程序委托挂钩。

有人知道如何解决此问题吗?


5
在执行分配之前,立即执行self.tabBarController的NSLog。仅当控制器为nil时才触发该消息。如果为零,并且已确保连接正确,请尝试在代码中实例化控制器。
FeifanZ 2011年

尝试评论窗口的初始化。.检查此答案 stackoverflow.com/a/33958144/1293445
mohammad alabid 2015年

Answers:


188

我有同样的问题。检查您的main.m。最后一个参数应设置为实现UIApplicationDelegate协议的类的名称。

retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");

49
另一个选择是确保应用程序委托类在main和use中导入NSStringFromClass。这就是Xcode现在创建main.m文件的方式。例如:#import "AppDelegate.h然后int retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
sho

10
确保self.window初始化类似self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
Raptor

1
我尝试了上述选项,但对我不起作用。而且我没有使用情节提要。
jowie 2012年

3
对我没有影响,进行更改后出现相同的“预期应用程序...”消息。解决方案是OrdoDei的答案(请参见上方或下方),效果很好。
安德鲁

1
如果您在模拟器中看到白色视图,但希望从情节提要中看到布局,请确保您摆脱了main.m中指向的根委托函数“ application didFinishLaunchingWithOptions ...”中的代码,并且只有“返回”是;” 在里面。
Olivier de Jonge 2014年

435

在AppDelegate中替换

 [window addSubview:[someController view]];

  [self.window setRootViewController:someController];

这为我摆脱了信息。它仍然没有显示后续窗口,但这可能是另一个问题。谢谢。
Jazzmine 2012年

3
如果您使用的是UINavigationController,则应首先[[UINavigationController] initWithRootViewController:tableViewController],然后使用上方的代码[self.window setRootViewController:self.navigationController]设置窗口的根视图控制器
emdog4 2013年

Cocos2d的注释为“ // AddSubView在iOS6上不起作用”,因此这已为我修复,因为我使用的是iOS6。–
Almo

1
addSubview行是Xcode / iOS SDK早期版本中项目模板的一部分。如果该应用程序运行很长一段时间,即使您没有编写它,也可能拥有它。
Seva Alekseyev

你好,我得到这个错误:-***-[UIApplication _runWithMainScene:transitionContext:completion:],/ BuildRoot / Library / Caches / com.apple.xbs / Sources / UIKit_Sim / UIKit-3505.16 / UIApplication.m中的断言失败: 3294如何解决这个问题
Akash Raghani 2015年

70

尝试更改已加载的第一个视图控制器时,我遇到了相同的错误

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

刚开始我真的不知道错误是从哪里来的,所以我缩小了范围,找出了问题所在。事实证明,我试图在视图实际出现在屏幕上之前更改视图的显示。因此,解决方案是在ViewController中移动此代码,这给我带来了麻烦

- (void)viewDidLoad

- (void)viewDidAppear:(BOOL)animated

并且错误停止出现。我的问题特别是由UIAlertView表演引起的。

在您的情况下,建议您在tabBarController的活动视图控制器中检出代码(因为这可能是该视图控制器中的问题)。如果这不起作用,请尝试在nib文件中而不是在代码中设置开始设置-如果要在代码中进行设置,请尝试将代码移至tabBarController的活动viewcontroller的适当方法。

祝好运!


1
沃克斯特,谢谢您的回答。就我而言,我不能将代码移出viewDidLoad:(不添加标志),也不必这样做。无论如何,谢谢您的建议!
ArtSabintsev 2011年

2
今天发现了这一点,很高兴我做到了-同样的问题-正在显示uialert在viewDidLoad中启动。更改为viewDidAppear并可以正常工作。不确定通过在iOS5中进行更改可以使Apple获得更大的好处。
GuybrushThreepwood

感谢警报视图引起的建议,同样的问题也发生在我身上。
克里斯(Chris)

1
您能否告诉我们您必须删除哪些代码才能对其进行分类?我将自己viewDidLoad用于很多事情,设置所有首次使用的东西,例如将数据添加到中UITableView。我不能将其移动到,viewDidAppear:因为我只希望它发射一次。
jowie 2012年

1
问题不是错误的功能。问题是您忘记在viewDidLoad函数中调用[super viewDidLoad],从而有效地消除了笔尖负载。同一件事发生在我身上不止一次。
borrrden 2012年

47

从“空应用程序”模板开始,然后手动添加XIB时,我得到了这个。我通过设置Sunny提出的主要Nib名称解决了该问题。在这种情况下缺少的步骤是删除

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

因为它将覆盖在Xib文件中创建的窗口的实例。这是假设您已经创建了一个ViewController并将其与XIB文件中的窗口和App Delegate连接起来。


这也为我解决了。我正在使用带有情节提要的选项卡式应用程序,试图将CoreData添加到其中,并遇到了此问题。
gitaarik

大声笑,如果我添加这个我得到两个警告,应用程序窗口应该有一个根视图控制器!
乔治·阿斯达

46

这发生在我身上。通过编辑.plist文件解决。指定Main nib文件的基本名称。(应为MainWindow.xib)。希望这会有所帮助。

在此处输入图片说明


2
这对我有用!当您在Xcode 4.2中创建一个空项目时,此方法有效,其中不存在MainWindow,这是我们必须如何连接它的方式。
jeevangs 2011年

当我们无意间从“ Info.plist”文件中删除了“ Main nib file base name”行时,对我们来说是个问题。再次插入此行可解决问题。
rtovars 2012年

您也可以在项目属性中进行设置。选择项目,您的目标,您可以在摘要-> iPhone / iPad部署信息中进行编辑。
doekman 2013年

这实际上是我的问题,导致在rootViewController上两次调用viewDidLoad和viewWillAppear时遇到多个问题。在我的情况下,删除此问题就是解决方案
Whyo​​z'5

27

最近,在使用ios5 sdk构建项目时遇到了同样的问题。最初,它正在构建并正常运行,但是此后出现了错误。
就我而言,解决方案非常简单。
缺少的是,以某种方式删除了我的应用程序目标的“摘要”选项卡中的“ 主界面”属性。所以我需要再次设置。


如果这不是重点,并且tabBarController仍然为nil,则始终可以以编程方式创建窗口和根控制器。作为备用,我在项目中添加了以下代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{ 
    if (!window && !navigationController) {
        NSLog(@"Window and navigation controller not loaded from nib. Will be created programatically.");
        self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
        UIViewController *viewController1, *viewController2;
        viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil] autorelease];
        viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease];

        self.tabBarController = [[[UITabBarController alloc] init] autorelease];
        self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];
        self.window.rootViewController = self.tabBarController;

    }
    else {
        [window addSubview:[tabBarController view]];
    }
    [self.window makeKeyAndVisible];
    return YES;
}

仅在也实现了sho的解决方案的情况下,此方法才有效。


24

我升级到iOS9,并开始无处解决此错误。我能够修复它,但是将以下代码添加到- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

NSArray *windows = [[UIApplication sharedApplication] windows];
for(UIWindow *window in windows) {
    if(window.rootViewController == nil){
        UIViewController* vc = [[UIViewController alloc]initWithNibName:nil bundle:nil];
        window.rootViewController = vc;
    }
}

我很好奇您的应用程序有多少个窗口以及是否都具有根视图控制器。谢谢
DrAL3X 2015年

5
注意:此答案是一种解决方法,不能解决根本原因。参见stackoverflow.com/a/33958144/1116061
lipka,2015年

你是一个真正的英雄!
user2161301 2016年

21

以上建议均不能解决我的问题。我的是这样的:

加:

window.rootViewController = navigationController;

后:

[window addSubview:navigationController.view];

在我的appdelegate的

- (void)applicationDidFinishLaunching:(UIApplication *)application {

20
  • 在Nib文件中选择“窗口”
  • 在“属性检查器”中,选中“启动时可见”

图片![]

  • 手动创建笔尖文件时会发生这种情况。
  • 此修复程序适用于常规笔尖模式-不适用于故事板模式

我认为这只能在情节提要模式下找到。
ArtSabintsev 2011年

不,这个项目是常规笔尖模式。 是情节提要模式下的屏幕截图。与“是初始视图控制器”对比“启动时可见”。
bearMountain 2011年

3
如果手动创建的窗口笔尖文件,并且默认情况下未选中“启动时可见”,则会在应用启动后提示此消息,这解决了我的问题!
ZYiOS

哦谢谢!!!最后,解决此烦人的警告。即使您有makeKeyAndVisible它也不能解决问题。仅此解决了对我的警告。谢谢!
tacos_tacos_tacos 2012年

“这是在常规笔尖模式下发生的-不是情节提要模式下的发生”不是很正确。我面临着同样的问题Storyboard
thesummersign

19

如何为iOS5添加RootViewController

如果您的应用到目前为止还没有使用RootViewController,只需通过单击File> New> New File创建一个;)。选择UIViewController subclass 它命名为RootViewController,取消选中“使用XIB作为用户界面”(假设您已经有一个),然后将此代码放入AppDelegate :: didFinishLaunchingWithOptions

rootViewController = [[RootViewController alloc] init];
window.rootViewController = rootViewController;

当然-您必须导入RootViewController.h并创建变量

这是一篇有关RootViewController和AppDelegate 的不错的文章


cupsofcocoa.com文章链接已失效-是否知道某处有副本?
Ríomhaire

1
这已经转移到binpress.com,更新答案链接
雷米

这是一个很好的链接。好的阅读并解释发生了什么。我也使用一本旧书(因为我想先学习Objective-C)也遇到了这个问题,但是在最新的XCode 7上编写了代码,而XCode 7没有较旧的模板。
ibaralf

11

我也遇到了这个错误,但是与以前列出的所有答案不同,这是因为我没有在新生成的控制器(xcode 4.2,ios5)中注释方法“ loadView”。

 //Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView  
{
}

它甚至告诉我,该方法是用于以编程方式创建视图的,但是我错过了它,因为它看上去与其他方法(例如viewDidLoad)非常相似,以至于我通常不会捕获它。

要解决该问题,只需简单地删除该方法即可,如果您不是以编程方式也使用笔尖或情节提要创建视图层次结构的话。


我可以确认这会导致问题。通过遵循有关TableView的教程,他们在loadView中创建设置委托的情况下,我遇到了同样的情况。将代码移至viewDidLoad并删除loadView之后,所有内容均根据需要开始工作。
欧根(Eugen)

您仍然可以使用加载视图,但是添加[super loadView]; 在开始时。
Hermann Klecker 2011年

1
嗯... loadView的文档专门指出您不应调用super方法。
约书亚·沙利文

我在情节提要中替换了默认的UIViewController,发现用于创建UIViewController子类的模板代码默认情况下启用了loadView,这导致我自己...在这个愚蠢的事情上浪费了一个多小时。感谢您发布!
slycrel 2012年

11

我也有这个问题。我让我的项目在xcode4.2.1中运行。我已经阅读了所有评论,但没有人适合我。过了一会儿,我发现我注释了一段代码。

//self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

然后我没有评论。对我来说一切都很好。希望这对你们有帮助。


代码:“ self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];”;导致错误,因此我将其删除。
Grigori A.

11

确保您的应用程序委托中具有此功能。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions {
   return YES;
}

确保didFinishLaunchingWithOptions返回YES。如果您碰巧删除了“ return YES”行,这将导致错误。此错误对于情节提要用户尤其常见。


很多荣誉,这就是我想要的(带有故事板的空项目)
Shtirlic 2012年

2
同样在这里。谢谢。如果创建空的应用程序,则此方法将由手动创建窗口填充。应该将其更改为仅返回YES。Thx
Ben G

10

我的第一个观点是MenuViewController

MenuViewController *menuViewController = [[MenuViewController alloc]init];
self.window.rootViewController = menuViewController;

在App Delegate方法上:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
}

那行得通。


10

iOS 5.0左右有一些细微变化,要求您具有根视图控制器。如果您的代码基于旧的示例代码(例如GLES2Sample),则在这些代码示例中没有创建根视图控制器。

要修复(例如GLES2Sample),请在中applicationDidFinishLaunching创建一个根视图控制器,并将glView附加到该控制器上。

- (void) applicationDidFinishLaunching:(UIApplication *)application
{
  // To make the 'Application windows are expected
  // to have a root view controller
  // at the end of application launch' warning go away,
  // you should have a rootviewcontroller,
  // but this app doesn't have one at all.
  window.rootViewController = [[UIViewController alloc] init];  // MAKE ONE
  window.rootViewController.view = glView; // MUST SET THIS UP OTHERWISE
  // THE ROOTVIEWCONTROLLER SEEMS TO INTERCEPT TOUCH EVENTS
}

这样一来,警告就会消失,并且不会真正影响您的应用程序。


9

尝试将选项卡栏控制器的IBOutlet连接到Interface Builder中的根视图,而不是

self.window.rootViewController = self.tabBarController;

但实际上我之前从未见过这样的错误。


8

我通过执行以下操作解决了该问题(上述其他解决方案均无济于事):

从与“主界面”关联的下拉菜单中选择另一个条目,然后重新选择“ MainWindow”,然后重新生成。

在此处输入图片说明


8

我遇到了相同的问题,但我正在使用 storyboard

将我分配storyboard InitialViewController给我的窗口rootViewController

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
...
UIStoryboard *stb = [UIStoryboard storyboardWithName:@"myStoryboard" bundle:nil];
self.window.rootViewController = [stb instantiateInitialViewController];
return YES;
}

这样就解决了问题。


7

升级到Xcode 4.3之后,并且仅从头开始创建项目时(即创建一个空项目,然后创建一个UIViewController,然后创建一个单独的nib文件),我就开始遇到同样的问题。

放置所有我惯用的行并确保连接正确后,我不断收到该错误,并且尝试通过视图控制器(设置为rootController)加载的nib文件从未在模拟器中显示。

我通过Xcode创建了一个单一的视图模板,并将其与我的代码进行比较,最终发现了问题!

Xcode 4.3似乎默认添加了-(void)loadView;方法。到视图控制器实现部分。仔细阅读其中的注释后,可以清楚地知道问题出在哪里。如果以编程方式创建视图(并且我正在措辞),则该注释指示将覆盖loadView方法,否则,如果使用笔尖,则不应覆盖loadView方法。此方法内部没有其他内容,因此实际上,我使用nib文件覆盖了该方法(并且不执行任何操作),该文件给出了错误。

解决方案是从实现部分中完全删除loadView方法,或者通过添加[super loadView]来调用父方法。

如果使用NIB文件,最好将其删除,因为添加任何其他代码实际上将覆盖它。


那正是我的问题!我添加了loadView实现,但没有调用super。是否做了其他一些代码更改,不记得我做了什么。让我呆了2个小时,因为这种变化看起来是如此无害。
LearnCocos2D

6

我在日志中有相同的错误消息。我在application:didFinishLaunchingWithOptions中弹出了一个UIAlertView。我通过延迟对alertView的调用来解决此问题,以允许根视图控制器有时间完成加载。

在application:didFinishLaunchingWithOptions中:

[self performSelector:@selector(callPopUp) withObject:nil afterDelay:1.0];

1秒后调用:

- (void)callPopUp
{
    // call UIAlertView
}

谢谢,这解决了我的问题。您必须等待显示警报,直到加载窗口之后。在我的情况下,我只是[使用对象:无afterDelay:1.0来警告performSelector:@selector(show)];
2013年

6

我有同样的问题。如果像我一样从头开始构建基于窗口的应用程序,则需要执行以下操作:(请注意,这些是Xcode 4.2的步骤。)

0.确保您的应用程序委托符合UIApplicationDelegate协议。

例如,假设我们的委托人称为MyAppDelegate。在MyAppDelegate.h中,我们应该具有以下内容:

@interface MyAppDelegate : 
    NSObject <UIApplicationDelegate> // etc...

1.在main.m中指定应用程序委托

例如,

#import "MyAppDelegate.h"

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

2.创建一个主窗口界面文件。

为此,请右键单击您的项目,然后选择“新建文件”。从那里,从iOS-> User Interface部分中选择Window。

将文件添加到您的项目后,转到项目的摘要(在项目上单击鼠标左键,然后单击摘要。)在“ iPhone / iPod部署信息”(如果需要,以及相应的iPad部分)下,然后在“主界面”组合框。

3.在界面编辑器中将其连接起来

在文件列表中选择您的接口文件以打开接口编辑器。

确保“实用程序”窗格已打开。

通过将“实用程序”窗格中“对象”列表中的“对象”拖到“窗口”对象下方上方的空间中,来添加新对象。选择对象。在“实用工具”窗格中单击“身份检查器”。将类更改为应用程序的委托(在本示例中为MyAppDelegate。)

调出MyAppDelegate的连接检查器。将窗口出口连接到接口文件中已经存在的窗口。

单击左侧的“文件所有者”,然后在“实用程序”窗格中单击“身份检查器”。将类别更改为UIApplication

调出文件所有者的连接检查器。将委托出口连接到MyAppDelegate对象。

4.最后,非常重要的是,单击界面文件中的Window对象。打开属性检查器。确保选中“启动时可见”。

我要做的就是让它为我工作。祝好运!


6

如果您使用MTStatusBarOverlay,则会收到此错误。

MTStatusBarOverlay创建一个没有根控制器的附加窗口([[UIApplication sharedApplication]窗口)。

这似乎没有引起问题。


你确定吗?你测试过了吗?
Sergey Grischyov

我确定它会创建一个窗口,并确保它不会在我的应用程序中造成问题。
困惑的Vorlon 2012年

您可以将虚拟VC设置为MTStatusBarOverlay进行修复。
韦斯利

这正是我的问题。我进行了类似的设置,并为通知栏添加了一个窗口,一旦我注释掉,错误就消失了!在这种情况下,它似乎无害。
亚伦·辛曼

6

使用XCode 4.6.3和iOS 6.1将我的UI替换为Storyboard后,收到相同的错误

通过清除AppDelegate中的didFinishLaucnhingWithOptions中的所有代码来解决此问题

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    return YES;
}

5

OrdoDei给出了正确且有价值的答案。我添加此答案只是为了举例didFinishLaunchingWithOptions说明使用他的答案并考虑其他人对Navigation Controller的评论的方法。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.

    // Instantiate the main menu view controller (UITableView with menu items).
    // Pass that view controller to the nav controller as the root of the nav stack.
    // This nav stack drives our *entire* app.
    UIViewController *viewController = [[XMMainMenuTableViewController alloc] init];
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

    // Instantiate the app's window. Then get the nav controller's view into that window, and onto the screen.
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // [self.window addSubview:self.navigationController.view];
    // The disabled line above was replaced by line below. Fixed Apple's complaint in log: Application windows are expected to have a root view controller at the end of application launch
    [self.window setRootViewController:self.navigationController];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

4

这是因为我无意中注释掉了:

[self.window makeKeyAndVisible];

- (BOOL)application:(UIApplication*) didFinishLaunchingWithOptions:(NSDictionary*)

4

我能够在xcode的摘要屏幕上设置初始视图控制器。

单击左侧文件浏览器中最上面的项目名称(它应该带有一个小蓝图图标)。在中心列中,在“目标”下单击您的项目名称(它旁边应该有一个铅笔“ A”图标)。在“ iPhone / iPod部署信息”下查找,然后查找“主界面”。您应该可以从下拉菜单中选择一个选项。


4

在正确的“ sho”答案上(UIApplicationMain的第四个参数应该是主控制器的名称),我添加了一些注释。

我最近改变了我的一个应用程序的“模型”,从使用MainWindow.xib以编程方式构造一个窗口。该应用程序使用了较旧的模板,该模板会自动创建该MainWindow。由于我想为iPhone 5支持不同的控制器视图XIB,因此在创建App Delegate时以编程方式选择正确的XIB更加容易。我也从项目中删除了MainWindow.xib。

问题是,我忘记填写UIApplication main中的第四个参数,并且我忘记了从Project Summary中的“ Main Interface”中删除MainWindow。

这导致了一个大问题:它在开发设备上发出了无害的​​警告“应用程序有望...”,但是当它进入App Store时,它在消费者手机上坏了,崩溃了,因为MainWindow已不在捆绑销售中!我必须要求对该错误修正进行快速审查。

另一个提示是,更改设置并将应用置于前台时,有时会出现白色块(如空白的UIView)。在iPhone 5中,很明显这是一个320x480的块。可能缺少的MainWindow是使用旧大小在开发模式下创建的。当崩溃的第一份报告到达收件箱时,我才发现此错误。

从App Store而非从XCode安装该应用程序表明该应用程序确实崩溃了,并且MainWindow问题在日志中显示出来,因此我可以看到它不是设备+ IOS版本的某种特殊组合。


4

为了增加Mike Flynn的答案,由于升级到Xcode 7并在iOS 9设备上运行我的应用程序,我将其添加到了我的 (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

// Hide any window that isn't the main window
NSArray *windows = [[UIApplication sharedApplication] windows];
for (UIWindow *window in windows) {
    if (window != self.window) {
        window.hidden = YES;
    }
}

我很好奇您的应用程序有多少个窗口以及是否都具有根视图控制器。谢谢
DrAL3X 2015年

3

当您没有正确设置Interface Builder时,就会发生此问题。

确保您的App Delegate的window和viewController插座已连接:

在您的MainWindow.xib中,按住Control,单击“ App Delegate”,然后拖动到Window对象。选择窗口。按住Control并再次选择App委托,将其拖动到您的根视图控制器并选择viewController。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.