我刚开始学习Objective-C,并且遇到了在加载视图(直接)到使用XIB作为rootViewController之间转换的问题。目前我正在尝试将我的xib文件加载到视图控制器对象中。虽然它编译没有任何问题,我的模拟器出现空白(基本接口,时间和电池电量计除外)。我还确保将我的XIB设置为类BNRReminderViewController并设置视图和相应的按钮/对象。 (我还将我的班级BNRReminderViewController.h导入我的.m文件)
以下是我的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
NSBundle *appBundle = [NSBundle mainBundle];
BNRReminderViewController *rvc = [[BNRReminderViewController alloc] initWithNibName:@"BNRReminderViewController" bundle:appBundle];
self.window.rootViewController = rvc;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
我认为发生的事情是我的BNRReminderViewController.xib文件不在mainBundle中,因此当我使用NSBundle对象初始化时,没有任何加载,这就是我得到空白屏幕的原因。我是Objective-C的新手,所以我真的不知道如何处理这个,因为许多其他语言只导入.h或直接读取文件。请帮忙。
答案 0 :(得分:0)
您可以使用rjstellings代码here检查您的NSBundle假设是否正确。
但是,如果您至少使用Xcode 5.0.1,那么您应该能够在不指定包名称的情况下逃脱。此外,由于您的ViewController类出现与xib具有相同的名称,因此Xcode非常智能,可以让您无需指定。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
BNRReminderViewController *rvc = [[BNRReminderViewController alloc] init];
[self.window setRootViewController:rvc];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
答案 1 :(得分:0)
您不必致电mainBundle。它可能是零。这段代码可能是解决方案:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.dashboardVC = [[DashboardViewController alloc] initWithNibName:@"DashboardViewController" bundle:nil];
UINavigationController * nc = [[UINavigationController alloc] initWithRootViewController:self.dashboardVC];
self.window.rootViewController = nc;
[self.window makeKeyAndVisible];
return YES;
}
否则,您是否使用Storyboard创建了应用程序?如果您从Storyboard开始,则必须删除以下行: