我在控制台中收到以下错误:
应用程序在应用程序启动结束时应该有一个根视图控制器
以下是我的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
的委托连接到App Delegate。
任何人都知道如何解决这个问题?
答案 0 :(得分:430)
在AppDelegate中替换
[window addSubview:[someController view]];
到
[self.window setRootViewController:someController];
答案 1 :(得分:188)
我有同样的问题。检查你的main.m.最后一个参数应该设置为实现UIApplicationDelegate协议的类的名称。
retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
答案 2 :(得分:69)
尝试更改
中加载的第一个视图控制器时遇到了同样的错误 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
起初我并不是真的知道错误来自哪里,所以我把它缩小了,发现出了什么问题。事实证明,我试图在视频实际出现在屏幕之前更改视图的显示。因此解决方案是在视图控制器中移动此代码,这会给我带来麻烦
- (void)viewDidLoad
到
- (void)viewDidAppear:(BOOL)animated
并且错误停止显示。特别是我的问题是由UIAlertView
节目引起的。
在你的情况下,我建议你查看tabBarController的活动视图控制器中的代码(因为它可能是该视图控制器中的一个问题)。 如果这不起作用,请尝试在nib文件中而不是在代码中设置起始设置 - 或者如果要在代码中执行此操作,请尝试将代码移动到tabBarController的活动viewcontroller的相应方法。
祝你好运!答案 3 :(得分:46)
我从“空应用程序”模板开始,然后手动添加XIB时得到了这个。我通过设置Sunny建议的主Nib名称来解决它。此方案中缺少的步骤是删除
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
这
application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
因为它将覆盖在Xib文件中创建的窗口实例。这假设您已经创建了一个ViewController并将其与您的窗口和App Delegate连接在XIB文件中。
答案 4 :(得分:46)
这发生在我身上。通过编辑.plist文件解决。 指定主nib文件基名。(应为MainWindow.xib)。 希望这会有所帮助。
答案 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;
}
只有在实施了笑的解决方案时,这才有效。
答案 6 :(得分: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;
}
}
答案 7 :(得分:21)
上述建议都没有解决我的问题。我是这样的:
添加:
window.rootViewController = navigationController;
后:
[window addSubview:navigationController.view];
在我的appdelegate的
中- (void)applicationDidFinishLaunching:(UIApplication *)application {
答案 8 :(得分:20)
答案 9 :(得分:19)
如何为iOS5添加RootViewController
如果你的应用程序到现在为止没有使用RootViewController,
只需创建一个;)通过点击文件>新>新文件;
选择UIViewController subclass
将其命名为 RootViewController ,取消选中With XIB for user interface(假设您已有)
并将此代码放在AppDelegate :: didFinishLaunchingWithOptions
rootViewController = [[RootViewController alloc] init];
window.rootViewController = rootViewController;
肯定 - 您必须导入RootViewController.h并创建变量
here is a nice article关于RootViewController和AppDelegate,
答案 10 :(得分:11)
我也遇到了这个问题。我让我的项目在xcode4.2.1中运行。我已经阅读了那里的所有评论,但没有人对我很酷。过了一会儿,我发现我评论了一段代码。
//self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
然后我取消评论它。一切都对我好。 希望这对你们有帮助。
答案 11 :(得分:11)
确保您在应用程序代理中具有此功能。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions {
return YES;
}
确保didFinishLaunchingWithOptions返回YES。如果您碰巧删除了“返回YES”行,则会导致错误。故事板用户可能会出现此错误。
答案 12 :(得分:11)
我也有这个错误,但不同于之前列出的任何答案,因为我在新生成的控制器(xcode 4.2,ios5)中取消了方法'loadView'。
//Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView
{
}
它甚至告诉我该方法是用于以编程方式创建视图但我错过了它,因为它看起来与其他方法如viewDidLoad非常相似,我通常使用我没有抓住它。
如果您没有以编程方式创建视图层次结构(即使用nib或storyboard),则只需删除该方法。
答案 13 :(得分: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
}
这会使警告消失,并且不会对您的应用产生任何影响。
答案 14 :(得分:9)
尝试将标签栏控制器的IBOutlet连接到Interface Builder中的根视图,而不是
self.window.rootViewController = self.tabBarController;
但实际上我之前没有见过这样的错误。
答案 15 :(得分:9)
我的第一个视图是MenuViewController
我添加了:
MenuViewController *menuViewController = [[MenuViewController alloc]init];
self.window.rootViewController = menuViewController;
App Delegate方法上的:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
}
那很有效。
答案 16 :(得分:8)
我通过执行以下操作解决了这个问题(以上其他解决方案都没有帮助):
从与“主界面”关联的下拉菜单中选择另一个条目,然后重新选择“MainWindow”,然后重建。
答案 17 :(得分: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;
}
这解决了这个问题。
答案 18 :(得分:7)
我在升级到Xcode 4.3后立即开始遇到同样的问题,并且只在从头开始创建项目时(即创建一个空项目,然后创建一个UIViewController,然后创建一个单独的nib文件)。
在放入我以前的所有行,并确保我有正确的连接后,我不断收到该错误,我试图通过视图控制器(设置为rootController)加载的nib文件从未显示过模拟器。
我通过Xcode创建了一个视图模板,并将其与我的代码进行了比较,最终找到了问题!
Xcode 4.3默认添加方法 - (void)loadView;到视图控制器实现部分。仔细阅读其中的评论后,问题就变得清晰了。如果以编程方式创建视图(并且我正在解释),则注释指示覆盖loadView方法,否则如果使用nib则不覆盖loadView。这个方法里面没有别的东西,所以在影响中我覆盖了方法(并且什么也不做)尽管使用了nib文件,这给出了错误。
解决方案是从实现部分中完全删除loadView方法,或者通过添加[super loadView]来调用父方法。
删除它最好是使用NIB文件,因为添加任何其他代码实际上会覆盖它。
答案 19 :(得分: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中选择Window - &gt;用户界面部分。
将文件添加到项目后,转到项目摘要(左键单击项目;单击摘要。)在iPhone / iPod部署信息下(如果您愿意,还可以选择相应的iPad部分)并选择新的接口文件在“主界面”组合框中。
第3。在界面编辑器中将其全部搞定
在文件列表中选择您的界面文件以打开界面编辑器。
确保“工具”窗格已打开。
通过将“对象”窗格中“对象”列表中的“对象”拖动到“窗口”对象下方的空白区域来添加新对象。选择对象。单击“实用工具”窗格中的“标识”检查器。将Class更改为应用程序的委托(在此示例中为MyAppDelegate。)
打开MyAppDelegate的连接检查器。将窗口连接到接口文件中已存在的窗口。
单击左侧的“文件所有者”,然后单击“实用工具”窗格中的“身份”检查器。将班级更改为UIApplication
打开文件所有者的连接检查器。将代理插座连接到MyAppDelegate对象。
<强> 4。最后,非常重要的是,单击界面文件中的Window对象。打开“属性”检查器。确保选中“在启动时可见”。
这就是我必须做的才能让它为我工作。祝你好运!
答案 20 :(得分:6)
如果您使用MTStatusBarOverlay,那么您将收到此错误。
MTStatusBarOverlay创建了一个没有根控制器的附加窗口([[UIApplication sharedApplication]窗口)。
这似乎不会引起问题。
答案 21 :(得分:6)
我在日志中遇到了同样的错误消息。我在应用程序中弹出了UIAlertView:didFinishLaunchingWithOptions。我通过延迟对alertView的调用来解决它,以便让根视图控制器有时间完成加载。
在应用程序中:didFinishLaunchingWithOptions:
[self performSelector:@selector(callPopUp) withObject:nil afterDelay:1.0];
在1秒后调用:
- (void)callPopUp
{
// call UIAlertView
}
答案 22 :(得分:6)
使用XCode 4.6.3和iOS 6.1将故事板替换为UI后收到相同的错误
通过清除AppDelegate中didFinishLaucnhingWithOptions的所有代码来解决它
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
return YES;
}
答案 23 :(得分:5)
OrdoDei给出了正确而有价值的答案。我添加这个答案只是为了给出一个didFinishLaunchingWithOptions
方法的例子,该方法使用他的答案以及其他人对导航控制器的评论。
- (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;
}
答案 24 :(得分:4)
我能够在xcode的摘要屏幕上设置初始视图控制器。
单击左侧文件资源管理器中最顶层的项目名称(它应该有一个小蓝图图标)。在中间列中,单击“TARGETS”下的项目名称,(它旁边应该有一个小铅笔'A'图标)。查看“iPhone / iPod部署信息”并查找“主界面”。您应该可以从下拉列表中选择一个选项。
答案 25 :(得分:4)
这件事发生在我身上,因为我无意中评论道:
[self.window makeKeyAndVisible];
这
- (BOOL)application:(UIApplication*) didFinishLaunchingWithOptions:(NSDictionary*)
答案 26 :(得分:4)
在“笑”答案之上,这是正确的(UIApplicationMain的第四个参数应该是主控制器的名称),我添加了一些注释。
我最近更改了我的应用程序的'模型',使用MainWindow.xib以编程方式构建窗口。该应用程序使用较旧的模板自动创建MainWindow。由于我想支持iPhone 5的不同控制器视图XIB,因此在创建App Delegate时以编程方式选择正确的XIB更容易。我也从项目中删除了MainWindow.xib。
问题是,我忘了填写UIApplication main中的第四个参数,我忘记从项目摘要中的“主界面”中删除MainWindow。
这引起了一个大问题:它在开发设备上呈现了无害的警告“应用程序应该......”,但当它进入App Store时,它在用户手机上崩溃,因为MainWindow不再在捆绑包中而崩溃!我不得不要求加快对错误修正的审查。
另一个问题是,当设置被更改并且应用程序被置于前台时,有时会出现像空白UIView一样的白色块。在iPhone 5中很明显它是一个320x480块。也许缺少的MainWindow是在开发模式下使用旧的大小创建的。当崩溃的第一个报告到达收件箱时,我刚刚发现了这个错误。
从App Store而不是从XCode安装应用程序表明应用程序确实崩溃,并且MainWindow问题在日志中显示出来,所以我可以看到它不是设备+ IOS版本的一些特殊组合。
答案 27 :(得分: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;
}
}
答案 28 :(得分:3)
我收到此错误(Applications are expected to have a root view controller at the end of application launch
),我正在以编程方式创建视图控制器。
通过确保我的根视图控制器中的loadView
方法调用[super loadView]
来解决此问题。
答案 29 :(得分:3)
当MainWindow.xib的文件所有者设置不正确时,也会显示此错误。
文件的所有者是UIApplication
- &gt;插入了app delegate类的对象,窗口连接到窗口
答案 30 :(得分:3)
如果未正确设置Interface Builder,则会出现此问题。
确保您的App Delegate的窗口和viewController插座已连接:
在MainWindow.xib中,按住control,单击App Delegate并拖动到Window对象。选择窗口。保持控制并再次选择App委托,拖动到根视图控制器并选择viewController。
答案 31 :(得分:1)
我也遇到了这个错误,但是已经列出的答案没有解决我的问题。 在我的情况下,日志显示是由于我在另一个子线程中分配应用程序根视图控制器。
-(BOOL) application:(UIApplication*) application didFinishLaunchingWithOptions:(NSDictionary*) launchOptions
{
...
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
...
dispatch_async(dispatch_get_main_queue(), ^{
...
[self updateTabBarTitles];
self.window.rootViewController = self.tabBarController;
...
});
});
[self.window makeKeyAndVisible];
return YES;
}
通过将rootViewController赋值移动到函数末尾 - 就在调用makeKeyAndVisible之前: - 导致日志消息不再显示。
{
...
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
我希望这会有所帮助。
答案 32 :(得分:1)
self.tabBarController
回复nil
的声音。 tabBarController
可能未在Interface Builder中连接。将IBOutlet
的{{1}}设置为Interface Builder中的tabBarController
。
答案 33 :(得分:1)
虽然很多这些答案似乎都是有效的,但没有人为我解决这个问题。我正在尝试使用空的应用程序模板并尝试直接加载到.xib文件以便了解(比如旧的窗口模板)。似乎Apple留下了运行的NSLog消息。
我在Xcode 4.3上,似乎没有任何东西摆脱这个消息,我想知道为什么。最后我决定看看在Xcode 4.5(预览/ iPhone 6.0版本)中会发生什么,并且消息不再存在。继续前进。
答案 34 :(得分:1)
我在Xcode 4.5.1中针对iOS 5.1的iPad应用程序中遇到了这个问题。该应用程序使用UITabBarController。我在标签栏控制器中需要一个新的部分,所以我创建了一个新的视图控制器和xib。一旦我将新的视图控制器添加到标签栏控制器,我的屏幕控制都不再有效,我得到了“预期有根视图控制器”的日志。
不知何故,新xib中的顶级对象是UIWindow而不是UIView。当我将UIView放入XIB时,如果视图出口指向它,将所有子视图移动到新的UIView中,并删除了UIWindow实例,问题就解决了。
答案 35 :(得分:1)
这个错误突然袭来了我。那是什么造成的呢?
事实证明我在IB中将文件所有者附加到我拖到视图上的新的小ImageView。我没有在.h文件中将其称为IBOutlet,因此当我按住Ctrl键拖动它时,新的Imageview未被列为可能的连接。小黑框中显示的唯一可能是View。我必须在不经意间点击。我做了一些更改然后运行程序并得到根控制器错误。该修复程序将文件所有者重新连接到xib-IB屏幕中的底部视图。
答案 36 :(得分:1)
确保为第一个场景正确设置了“是初始视图控制器”。
这就是导致错误的原因。
答案 37 :(得分:0)
我在使用 CoreData
和自定义 ServiceLocator 时遇到了这样的错误
let context: NSManagedObjectContext = try self.dependencies.resolve()
//solution
let context: NSManagedObjectContext? = try? self.dependencies.resolve()
答案 38 :(得分:0)
This Swift 2 solution worked for me :
Insert the code below in AppDelegate -> didFinishLaunchingWithOptions
self.window!.rootViewController = storyboard.instantiateViewControllerWithIdentifier("YourRootViewController") as? YourRootViewControllerClass
答案 39 :(得分:0)
如果您的应用程序用FingerTipWindow替换主UIWindow(以显示投影仪上的触摸)并且您没有更新源几年(几年),则替换对象可能不包含rootViewController属性(请参阅kgn的5 / 21/2013 mod at GitHub)
您可以在window.rootViewController
中设置didFinishLaunchingWithOptions
,直到奶牛回家,但您的窗口不会在应用程序启动结束时报告一个“,并且会在运行时抛出异常。更新您的来源。
答案 40 :(得分:0)
我也有这个问题。事实证明,当我从左侧的Objects列表中删除App Delegate时,我删除了App Delegate,Window和TabBarController的连接:)
答案 41 :(得分:0)
您是否尝试过设置代理,即
self.rootController.delegate = self;
在applicationDidFinishLaunchingWithOptions中?这对我有用,虽然我不确定为什么。
答案 42 :(得分:0)
将setRootViewController:
从didFinishLaunchingWithOptions:
移到awakeFromNib:
解决了这个问题。
答案 43 :(得分:0)
就我而言,关于实际窗口和didFinishLaunchingWithOptions:
方法的所有内容都很好。
我的错误是我在启动时没有意识到applicationDidBecomeActive:
运行,此外还有应用程序在后台运行后到达前台。
因此,在applicationDidBecomeActive:
中,我正在操纵尚未完成所有设置的视图控制器(等待不同的线程响应,等等)。
一旦我将此功能移到applicationDidBecomeActive
之外,错误便消失了。
答案 44 :(得分:0)
答案都没有解决我的问题。
我正在开发一个升级到ARC的旧iOS4项目,现在正在使用适用于iOS 7的Xcode 5
我仔细阅读了所有内容并开始检查我的配置和代码。
为我修复的是添加
-(BOOL) application:(UIApplication*) application didFinishLaunchingWithOptions: (NSDictionary*) launchOptions
{
// Maybe do something
return YES;
}
除了
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
}
我没有
-(BOOL) application:(UIApplication*) application didFinishLaunchingWithOptions: (NSDictionary*) launchOptions
在收到错误之前。
答案 45 :(得分:0)
以上都没有为我工作......在我的appDelegate上发现我的init方法有问题。如果要实现init方法,请确保正确执行
我有这个:
- (id)init {
if (!self) {
self = [super init];
sharedInstance = self;
}
return sharedInstance;
}
并将其更改为:
- (id)init {
if (!self) {
self = [super init];
}
sharedInstance = self;
return sharedInstance;
}
其中“sharedInstance”是指向我的appDelegate单例的指针
答案 46 :(得分:0)
进行ARC更改:
更改为
@synthesize window;
而不是
@synthesize window=_window;
答案 47 :(得分:0)
我收到了相同的错误消息,因为我在
中调用了一个警告- (void)applicationDidBecomeActive:(UIApplication *)application
而不是
- (void)applicationWillEnterForeground:(UIApplication *)application
答案 48 :(得分:0)
我正在将旧的EAGLView示例项目迁移到Xcode 4中的新GLKView示例项目,并且没有一个解决方案适合我。最后我意识到我正在尝试将主要的GLKViewController的self.view设置为指向Interface Builder中的嵌套GLKView。
当我将self.view指向Interface Builder中的根GLKView时,我的应用程序可以在没有错误消息的情况下启动(因此请确保将视图控制器的视图设置为根视图)。 /强>
P.S。如果要使嵌套的GLKView工作,请在ViewController.h中创建一个新的成员变量,如self.glkSubview,并将其连接拖到Interface Builder中的嵌套GLKView中。然后确保将self.glkSubview的委托拖到File的所有者。您必须在“ - (void)glkView:(GLKView *)视图drawInRect:(CGRect)rect”中手动调用[self.glkSubview display],如果您为GLKView关闭了setNeedsDisplay。
答案 49 :(得分:-7)
验证您的STORYBOARD文件...如果您使用IB将代码'连接'到您的UI ...并且恰好删除了UI元素...然后意识到,哦,您需要删除代码中的引用(在我看来是一个名为AbortButton的UIButton)......然后片刻之后应用程序将无法启动......
问题出在“故事板”文件中。在xml编辑器中打开它,寻找孤立的“关系”,连接器指向它们不应该放置的地方......
例如:
&LT;关系&GT; &lt; relationship kind =“outlet”name =“AbortButton”candidateClass =“UIButton”/&gt;
我的代码中不再存在...(但我仍然在故事板文件中链接了'连接器')..
我也有(从UIImageView或ToolBar到我的主要UIViewController.view对象的某种方式和无效的连接器)......不要认为它喜欢这个......
底线 - 一个人不需要手动“编码控制器”就可以了...... STORYBOARD文件被打破了。我修好了,宾果游戏又完美了......
和顺便说一句,作为一个文本编码器..我越来越喜欢IB ......在MS Visual Studio的IDE上屁股......