在过去的几周里,我一直在研究一个使用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开发人员来说,非常令人沮丧并且非常难以解决。
有没有人知道可能会破坏什么以及如何修复它?任何帮助表示赞赏!
答案 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。