2011-10-16 66 views
1

升級到4.2的Xcode我收到以下警告之後...如何正確創建一個根視圖控制器?

應用預計將有在應用程序啓動

的最後一個根視圖控制器讀取多達我可以後在線查找關於RootViewController的信息我不確定我是否已經正確創建了我的根視圖控制器。我很早以前就創建了它,當時我第一次學習用xCode編程。

我有一個問題,可以命名根視圖控制器而不是RootViewController。我現在看到的每個示例都將其命名爲RootViewController。我也看到它在應用程序代理合成像這樣...

@synthesize rootViewController = _rootViewController; 

我不明白這是做什麼。爲什麼不......

@synthesize rootViewController; 

在我改變了我的根視圖控制器RootViewController的名稱,隨後我發現在cupsofcocoa.com的例子中的任何事件。但即使在更改之後,我仍然得到「預計會有根控制器...」的警告。

如果有人有時間去看看,讓我知道我缺少什麼,我已經列出了我的初始化代碼的重要部分下面。

感謝,

約翰

//RootViewController.h 
#import <UIKit/UIKit.h> 

@interface RootViewController : UIViewController { 

} 
@end 

//RootViewController.m 
#import "RootViewController.h" 
#import "JetLoggerAppDelegate.h" 

@implementation RootViewController 
@end 

//JetLoggerAppDelegate.h my app delegate 
#import <UIKit/UIKit.h> 
@class RootViewController; 

@interface JetLoggerAppDelegate : NSObject <UIApplicationDelegate> { 
    UIWindow *window; 
    RootViewController *rootViewController; 

} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet RootViewController *rootViewController; 
@end 

//.m app delegate 
#import "JetLoggerAppDelegate.h" 
#import "RootViewController.h" //I don't think I need this here 

@implementation JetLoggerAppDelegate 

@synthesize window; 
@synthesize rootViewController = _rootViewController; 

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

    if ([launchOptions count] == 0) { 
     _rootViewController = [[RootViewController alloc] init]; 
     self.window.rootViewController = self.rootViewController; 
     [window makeKeyAndVisible];   
     return YES; 

    }else{ 
     [JLHelper showAlertWithTitle:@"" message:[NSString stringWithFormat:@"launchOptions: %@", launchOptions]]; 

    } 

    return NO; 

} 

//main.m 
#import <UIKit/UIKit.h> 

int main(int argc, char *argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, @"JetLoggerAppDelegate"); 
    [pool release]; 
    return retVal; 
} 

回答

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

    if ([launchOptions count] == 0) { 
     _rootViewController = [[RootViewController alloc] init]; 
     self.window.rootViewController = self.rootViewController; 
     **[window addSubview:_rootViewController.view];** 
     [window makeKeyAndVisible]; 
     return YES; 

    }else{ 
     [JLHelper showAlertWithTitle:@"" message:[NSString stringWithFormat:@"launchOptions: %@", launchOptions]]; 
return NO; 
    } 
return nil; 
} 

認沽回報裏面沒有else語句,並在年底投收益爲零;希望這個幫助。

+0

你必須檢查的在設置窗口的rootViewController屬性之前的版本 – Bastian

+0

其實我確實有addSubview這一行。我試圖返回零,但它會引發警告「不兼容的整數轉換指針....」。在任何情況下,我仍然會在運行時收到「應用程序預計會有根視圖控制器...」的警告。 – user278859

0

應用預計將有一個根視圖控制器

如果你想支持的設備與iOS <4.0的AppDelegate更換

[window addSubview:[someController view]]; 

[self.window setRootViewController:someController]; 
相關問題