3

在过去的几周里,我一直在开发一个使用 SoundManager 类的应用程序,我通过这篇博文的评论找到了该类: http ://www.gehacktes.net/2009/03/iphone-programming-part-6-多音与开音/

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

在 iOS 4.2 发布之前,我对这段代码非常满意。相应地更新我的 iPad 和 Xcode 后,我使用 SoundManager 类的应用程序只显示带有标题的导航栏。屏幕的其余部分是白色的。这不是 iPad 特有的行为。我在升级到 iOS 4.2 的 iPhone4 和 iPhone 3G 上看到了同样的情况。

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

有谁知道什么可能已经坏了以及如何修复它?任何帮助表示赞赏!

4

3 回答 3

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];
}

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

于 2010-11-24T13:20:09.657 回答
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 中,它会导致问题。如果你有它,只需评论或删除此代码。

于 2011-04-16T10:42:17.893 回答
1

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

于 2011-11-10T14:57:45.737 回答