iPad 应用程序启动中的基本错误

Posted

技术标签:

【中文标题】iPad 应用程序启动中的基本错误【英文标题】:Basic error in iPad application launch 【发布时间】:2012-02-12 20:47:42 【问题描述】:

我有一个名为 MMAppDelegate.m 的文件:

#import "MMAppDelegate.h"

@implementation MMAppDelegate

@synthesize window;
@synthesize viewController;

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


    viewController = [[MainViewController alloc] init];
    [window addSubview:viewController.view];

    // Override point for customization after application launch.
    [window makeKeyAndVisible];
    return YES;

//and more standard methods

MMAppDelegate.h:

#import <UIKit/UIKit.h>
#import "MainViewController.h"

@interface MMAppDelegate : UIResponder <UIApplicationDelegate> 
    UIWindow *window;
    MainViewController *viewController;


@property (nonatomic, retain) UIWindow *window;
@property (nonatomic, retain) MainViewController *viewController;

@end

MainViewController.m:

#import "MainViewController.h"

@implementation MainViewController

- (void)viewDidLoad 
    NSLog(@"view did load main view controller");
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor redColor];


@end

然而,当我运行程序时,我得到一个黑屏,并且输出:

2012-02-12 15:44:48.160 MoreMost[44076:f803] view did load main view controller
2012-02-12 15:44:48.163 MoreMost[44076:f803] Applications are expected to have a root view controller at the end of application launch

有什么问题?

【问题讨论】:

【参考方案1】:

改变这一行:

[window addSubview:viewController.view];

到这里:

window.rootViewController = viewController;

您需要创建窗口,如下所示:

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

【讨论】:

您也应该创建UIWindow。这可能会有所帮助:)【参考方案2】:

您不需要/不想将视图控制器的视图添加为子视图。你想让你的控制器成为根视图控制器,剩下的交给 ios 处理:

window.rootViewController = viewController;

也就是说,从 iOS 4 开始。(如果您要早点返回,则不确定答案。)

您还需要在使用它之前创建窗口。类似的东西

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

不知道你是不是没有,或者你只是没有表现出来......

【讨论】:

我正在合成窗口。这够了吗?制作窗口的代码是什么。如果我只是将行更改为 window.rootViewController = viewController,问题仍然存在 不。合成只是创建目标 c getter/setter。请参阅我的更新答案。

以上是关于iPad 应用程序启动中的基本错误的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 6 启动失败:尝试在 iPad 上启动应用程序超时

动态生成 iPhone/iPad 应用程序启动图像的好方法

SwiftUI:使用 Sidebar Visible 启动三列 iPad 应用程序

Ipad 锁定/关闭后重新启动 ios 应用程序

在 ipad 应用程序中的 UIWebview 中启动链接时,我们可以获得任何结果或反馈吗

无法在 iPad 模拟器上启动胶子应用程序