0

我知道还有其他类似问题的帖子,我已经检查过了,但似乎没有一个是关于我的具体问题,所以请多多包涵。

我正在开发一个应该只在 iPad 上运行的应用程序,所以没有通用的东西:MainWindow nib 文件是为 iPad 设计的。

问题是,只要我在 Xcode(5.0 和 5.1)的 iPad 模拟器上运行它,一切正常。但是,当我尝试在实际的 iPad(使用 iOs 5.0)上运行它时,我得到的只是一个空白屏幕,并且控制台上的“应用程序在应用程序启动结束时应该有一个根视图控制器”消息。

这是一些应该相关的代码:

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

...
self.window.rootViewController = self.splitViewController;
[self.window makeKeyAndVisible];

VistaInizialeViewController *inizialeAppoggio = [[VistaInizialeViewController alloc] initWithNibName:@"VistaInizialeViewController" bundle:nil];
self.vistaIniziale = inizialeAppoggio;
[inizialeAppoggio release];
 id debug = self.window.rootViewController;
[self.window.rootViewController.view addSubview:self.vistaIniziale.view];
...
debug = self.window.rootViewController;

所以让我感到困惑的是:如果我在模拟器上一步一步地运行上面的代码,调试变量(根视图控制器)会被初始化,而如果我在真实设备上运行它,它只是零。

好的,这就是我的,我非常感谢任何帮助。

谢谢大家。

4

2 回答 2

0

1)设备区分大小写,模拟器不区分。

您确定 nib 文件名为 ' VistaInizialeViewController',而不是 ' vistaInizialeViewController' 或 ' VistainizialeViewController' 之类的名称吗?

2)检查 self.splitViewcontroller 是否nil- 确保您xib为启动时加载的主 xib 指定了正确的文件名(或者如果您在代码中生成它,请在其中设置断点并逐步验证它正在生成正确)

于 2012-04-10T15:57:22.010 回答
0

好的,我解决了。我所做的是在设置 self.window.rootViewController 之前添加以下代码

UISplitViewController *splitAppoggio = [[UISplitViewController alloc] init];
CategoriesViewController *categorieVC = [[[CategoriesViewController alloc] init] autorelease];
DetailViewController *dettaglioVC = [[[DetailViewController alloc] init] autorelease];
categorieVC.detailViewController = dettaglioVC;
UINavigationController *navVC = [[UINavigationController alloc] initWithRootViewController:categorieVC];
NSArray *arrayVC = [NSArray arrayWithObjects:navVC,dettaglioVC, nil];
splitAppoggio.viewControllers = arrayVC;
splitAppoggio.delegate = dettaglioVC;
self.splitViewController = splitAppoggio;
[splitAppoggio release]; 

有了这个,它也可以在实际设备上正常工作。为什么它不需要它在模拟器上运行,而它需要在 iPad 上运行,我仍然无法理解......

于 2012-04-11T12:27:58.573 回答