【问题标题】:Basic error in iPad application launchiPad 应用程序启动中的基本错误
【发布时间】: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

有什么问题?

【问题讨论】:

    标签: ios ipad uiview uiviewcontroller


    【解决方案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。请参阅我的更新答案。
    猜你喜欢
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    相关资源
    最近更新 更多