升级到iOS 4.2后,应用程序在启动时显示白屏

时间:2010-11-24 11:39:12

标签: iphone ios-4.2

在过去的几周里,我一直在研究一个使用SoundManager类的应用程序,我通过这篇博客文章的评论找到了这个类: http://www.gehacktes.net/2009/03/iphone-programming-part-6-multiple-sounds-with-openal/

David Evans的评论中提供了SoundManager和测试器应用程序的链接。我不允许提供第二个链接,所以我会提到他链接到的ZIP文件的名称: SoundTester.zip

我很满意这段代码,直到iOS 4.2发布。相应地更新我的iPad和Xcode后,我使用SoundManager类的应用程序仅显示带有标题的导航栏。屏幕的其余部分是白色的。这不是iPad特有的行为。我在升级到iOS 4.2的iPhone4和iPhone 3G上看到过相同的内容。

在模拟器中运行应用程序时,我得到相同的结果。问题是我在控制台窗口中没有收到任何错误消息,根本没有构建和编译错误。对于几个月前开始使用iPhone SDK的iPhone开发人员来说,非常令人沮丧并且非常难以解决。

有没有人知道可能会破坏什么以及如何修复它?任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:1)

有人请开枪......

在我从iPhone Developer's Cookbook中写下的一段代码的帮助下找到了问题。

问题不在于SoundManager(幸运的是,它仍能正常工作!)但在应用程序中:App Delegate类中的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];
}

这段代码记录了所有被调用的方法。

答案 1 :(得分:1)

我在 - (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中,它导致了问题。只要注释或删除此代码即可。

答案 2 :(得分:1)

我有同样的问题。问题是重复的UIWindow。