运行应用程序时,需要在控制台中提供"应用程序窗口在应用程序启动结束时应具有根视图控制器"警告。这是我正在进行的核心数据测试。我没有得到用于测试的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/