2013-12-10 37 views
0

在运行我的应用程序时,在我的控制台中需要有关“应用程序窗口在应用程序启动结束时具有根视图控制器”警告的帮助。这是我正在研究的核心数据测试。我没有得到我用于测试的NSLog语句,只有前面的消息。在AppDelegate中实例化UITableViewController以与Storyboard配合使用iOS

我从空应用程序创建了一个新项目。我的应用程序委托didFinish方法代码生成如下所示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary  *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

我添加了一个故事板并将其设置为主界面。然后添加一个UITableView到故事板。通过添加一个文件创建一个UITableViewController,并将其设置为身份检查器中的UITableView类。

它似乎摆脱了我应该设置rootViewController的警告。如果我没有在appDelegate.m文件中实例化它,我该如何将我的UITableViewController设置为rootViewController?或者,如果我做实例它在appDelegate.m像这样

UITableViewController *tableViewController = [[UITableViewController alloc]init]; 
self.window.rootViewController = tableViewController; 

我怎么用相应的.h和.m文件关联tableViewController?

使用的Xcode 5.0.1,部署目标7.0

+1

糟糕的开发实践。如果你不明白你在做什么,从一个单一的视图应用程序开始。 – duci9y

+0

这是因为我不明白我在问这个问题。这就是为什么。 – noobsmcgoobs

回答

1

将故事板添加到空应用程序中,并将Info.plist中的属性“主故事板文件基本名称”设置为故事板的名称时,应用程序会实例化您的“窗口”对象并指定您的实例故事板的“initialViewController”作为窗口对象的“rootViewController”属性。所以你看不到警告:

“应用程序窗口预计将有在应用程序启动的最后一个根视图控制器”当你做:

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary  *)launchOptions {  
    return YES; 
} 

这工作得很好。

然而,在代码:

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary  *)launchOptions { 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] 
    //Override point for customization after application launch. 
    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

如果您使用的故事板,你已经通过创建一个新的窗口对象,它不再由故事板提供的RootViewController的覆盖缺省行为。在这种情况下,您必须明确地向您的窗口对象添加一个根视图控制器。

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

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    self.window.backgroundColor = [UIColor whiteColor]; 
    UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"YourStoryboard" bundle:[NSBundle mainBundle]]; 
    YourTableViewController* vc = (YourTableViewController*)[storyboard instantiateInitialViewController]; 

    _window.rootViewController = vc; 

    [self.window makeKeyAndVisible]; 
    return YES; 
} 

希望这有助于!

+0

是的,谢谢你的完整答案! – noobsmcgoobs

0

在故事板设定所需的控制器initialViewController。

在AppDelegate.m

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    youRootViewControllerObject = [storyboard instantiateInitialViewController]; 

这样,您就可以访问YouRootViewController类。

+0

我没有'self.window.rootViewController'代替你提到的你的RootViewControllerObject。它的工作,没有与使用我的UITableViewController对象,除非我正确阅读你的答案 – noobsmcgoobs

+0

它很好,你的问题解决了。 – Deepak

0

我做了很多研究,终于找到了在appDelegate.m做到这一点

,而不是

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary  *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

的代码应该简单地

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

    return YES; 
} 

看到合适的方法Sitepoint帮助页面获取更多详细信息 http://www.sitepoint.com/ios-application-development-storyboards/

相关问题