在AppDelegate中实例化UITableViewController以与Storyboard iOS一起使用



运行应用程序时,需要在控制台中提供"应用程序窗口在应用程序启动结束时应具有根视图控制器"警告。这是我正在进行的核心数据测试。我没有得到用于测试的NSLog语句,只有前面的消息。

我从一个空应用程序创建了一个新项目。我的应用程序委托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;

如何将tableViewController与相应的.h和.m文件关联?

使用Xcode 5.0.1,部署目标7.0

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

希望这能有所帮助!!

在StoryBoard中,将所需的控制器设置为initialViewController。

在AppDelegate.m 中

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

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

我做了很多研究,最终找到了正确的方法来完成

在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/

最新更新