在AppDelegate中实例化UITableViewController以使用情节提要iOS

在AppDelegate中实例化UITableViewController以使用情节提要iOS,ios,objective-c,storyboard,Ios,Objective C,Storyboard,运行我的应用程序时,我的控制台中出现“应用程序windows在应用程序启动结束时应具有根视图控制器”警告,需要帮助。这是我正在进行的一项核心数据测试。我没有得到用于测试的NSLog语句,只有前面的消息 我从一个空的应用程序创建了一个新项目。生成的My app delegate didFinish方法代码如下所示: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary

运行我的应用程序时,我的控制台中出现“应用程序windows在应用程序启动结束时应具有根视图控制器”警告,需要帮助。这是我正在进行的一项核心数据测试。我没有得到用于测试的NSLog语句,只有前面的消息

我从一个空的应用程序创建了一个新项目。生成的My app delegate 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,并在identity inspector中将其设置为UITableView的类

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

UITableViewController *tableViewController = [[UITableViewController alloc]init];
self.window.rootViewController = tableViewController;
如何将tableViewController与相应的.h和.m文件关联


使用Xcode 5.0.1,情节提要中的部署目标7.0将所需控制器设置为initialViewController

在AppDelegate.m中

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

通过这种方式,您可以访问ootviewcontroller类。

我做了大量研究,最终找到了正确的方法

在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的帮助页面

将情节提要添加到空应用程序中,并将Info.plist中的属性“Main storyboard file base name”设置为情节提要的名称时,应用程序将实例化“窗口”对象,并将情节提要的“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;
}

希望这有帮助

糟糕的开发实践。如果你不明白自己在做什么,就从单视图应用程序开始。这是因为我不明白我在问这个问题。这就是为什么。我做了
self.window.rootViewController
来代替你提到的ootviewcontroller对象。它起作用了,除非我读错了你的答案,否则无法使用我的UITableViewController对象