转换为ARC后的根视图控制器警告

时间:2011-12-18 17:09:01

标签: objective-c ios opengl-es automatic-ref-counting

我正在将我的opengl游戏转换为ARC,并且在应用程序启动时遇到此错误/警告消息:

  

应用程序在应用程序启动结束时应该有一个根视图控制器。

我没有使用nib或xib文件来创建我的视图或窗口。在非弧形代码中一切正常(现在已经有几年了)。

在错误/警告之后,游戏继续运行并且运行得很好,但我想知道是什么导致这种情况,因为它可能会导致问题。

我的猜测是某些东西没有被正确保留,因为它是弧形,但我无法弄清楚是什么。有任何想法吗?这是我如何创建我的opengl视图和窗口。

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

    glView = [[EAGLView alloc] initWithFrame:[UIScreen mainScreen].bounds];

    [window addSubview:glView];
    [window makeKeyAndVisible];

    [glView performSelectorOnMainThread:@selector(startMainGameLoop) withObject:nil waitUntilDone:NO]; 

    return YES;
}

和...

@interface GameAppDelegate : NSObject <UIApplicationDelegate> 
{
    UIWindow *window;
    EAGLView *glView;
}

3 个答案:

答案 0 :(得分:2)

许多人没有在Xcode 4.2上的iOS5中的应用程序委托的窗口属性上设置rootViewController属性,弹出“Applications are expected to have a root view controller at the end of application launch.”消息。 (不依赖于ARC)

A question on why this message shows up has been posted here

现在它似乎是一个友好的警告。虽然总的感觉是它会成为一种规则。

在Xcode中查看“OpenGL游戏”的项目模板可能是值得的。这似乎是苹果希望所有应用程序结构化的方式。

答案 1 :(得分:0)

您可能需要将@property和@synthesize用于glView。

答案 2 :(得分:0)

更改为

@synthesize window;

而不是

@synthesize window = _window;