升级到 iOS 4.2 后应用程序启动时显示白屏
Posted
技术标签:
【中文标题】升级到 iOS 4.2 后应用程序启动时显示白屏【英文标题】:App shows white screen on startup after upgrading to iOS 4.2 【发布时间】:2010-11-24 11:39:11 【问题描述】:在过去的几周里,我一直在开发一个使用 SoundManager 类的应用程序,我通过这篇博文的 cmets 找到了该类: http://www.gehacktes.net/2009/03/iphone-programming-part-6-multiple-sounds-with-openal/
David Evans 在 cmets 中提供了指向 SoundManager 和测试器应用程序的链接。我不允许提供第二个链接,所以我会提到他链接到的 ZIP 文件的名称: SoundTester.zip
在 ios 4.2 发布之前,我对这段代码非常满意。相应地更新我的 iPad 和 Xcode 后,我使用 SoundManager 类的应用程序只显示带有标题的导航栏。屏幕的其余部分是白色的。这不是 iPad 特有的行为。我在升级到 iOS 4.2 的 iPhone4 和 iPhone 3G 上看到了同样的情况。
在模拟器中运行应用程序时,我得到了相同的结果。问题是我在控制台窗口中没有收到任何错误消息,也根本没有构建和编译错误。对于几个月前才开始使用 iPhone SDK 的 iPhone 开发人员来说,这非常令人沮丧且难以解决。
有没有人知道什么地方可能坏了以及如何修复它?任何帮助表示赞赏!
【问题讨论】:
【参考方案1】:请有人向我开枪……
在我从 iPhone Developer's Cookbook 中写下的一段代码的帮助下,刚刚发现了问题。
问题不在于 SoundManager(幸运的是,它仍然可以正常工作!),而在于 App Delegate 类中的 application:didFinishLaunchingWithOptions: 方法。
这是在 iOS 4.2 中导致问题但在 iOS 3.2 中仍然有效的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
// Create a Navigation Controller on the fly.
// Use the View Controller as root view controller.
viewController.title = @"ThreeSounds";
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController];
nav.navigationBar.barStyle = UIBarStyleBlack;
// Add the view controller's view to the window and display.
[window addSubview:nav.view];
[nav release];
[window makeKeyAndVisible];
return YES;
解决方案:删除显示:[nav release] 的行。 出于某种原因,在 iOS 3.2 中释放导航控制器不是问题。 在 iOS 4.2 中会使屏幕变白。
我发现这个方法是问题所在,因为它是最后执行的方法。反过来,我通过将这段代码添加到我项目中的每个类中发现:
-(BOOL) respondsToSelector:(SEL)aSelector
printf("SELECTOR: %s\n", [NSStringFromSelector(aSelector) UTF8String]);
return [super respondsToSelector:aSelector];
这段代码记录了所有被调用的方法。
【讨论】:
【参考方案2】:我在-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法中使用了以下代码
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
if (!window)
[self release];
return 0;
当我启动我的应用程序时,这种方法会导致白屏。在 3.2 / 4.0 SDK 中没问题。在 SDK 4.3 中,它会导致问题。如果您有此代码,请评论或删除它。
【讨论】:
【参考方案3】:我有同样的问题。问题是重复的 UIWindow。
【讨论】:
非常感谢。这让我有权利修复一大堆错误。以上是关于升级到 iOS 4.2 后应用程序启动时显示白屏的主要内容,如果未能解决你的问题,请参考以下文章