开发者

App shows white screen on startup after upgrading to iOS 4.2

For the past few weeks I have been working on an app that uses a SoundManager class that I found via the comments of this blog post: http://www.gehacktes.net/2009/03/iphone-programming-part-6-multiple-sounds-with-openal/

The link to the SoundManager and tester app is provided in the comments by David Evans. I am not allowed to provide a second link so I'll mention the name of ZIP file he links to: SoundTester.zip

I was very happy with this code, until iOS 4.2 was released. After u开发者_如何学运维pdating my iPad and Xcode correspondingly, my apps that use the SoundManager class only show the navigation bar with it's title. The rest of the screen is white. It's not iPad specific behavior. I have seen the same on an iPhone4 and an iPhone 3G that upgraded to iOS 4.2.

When running the apps in the simulator, I get the same results. The problem is that I get no error messages in the console window and no build and compile errors at all. Very frustrating and very hard to fix for an iPhone developer that started using the iPhone SDK only months ago.

Does anyone have a clue what could have gone broken and how to fix it? Any help is appreciated!


Somebody please shoot me...

Just found the problem, with the help from a piece of code I had written down from the iPhone Developer's Cookbook.

The problem was not the SoundManager (which still works fine, fortunately!) but in the application:didFinishLaunchingWithOptions: method in the App Delegate class.

Here is the code that causes the problem in iOS 4.2 but still works in 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;
} 

The solution: remove the line that says: [nav release]. For some reason, releasing the navigation controller was not a problem in iOS 3.2. In iOS 4.2 is makes the screen go white.

I found out that this method was the problem because it was the last method that was executed. That, in turn, I found out by adding this piece of code to every class in my project:

-(BOOL) respondsToSelector:(SEL)aSelector {
 printf("SELECTOR: %s\n", [NSStringFromSelector(aSelector) UTF8String]);
 return [super respondsToSelector:aSelector];
}

This piece of code logs all the methods that get called.


I used the following code in - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions method

window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
if (!window) 
{
  [self release];
  return 0;
}

This method caused white screen when I launched my app. It was OK in 3.2 / 4.0 SDK. In SDK 4.3 it is causing the problem. Just comment or remove this code if you have it.


I had same problem. The problem was duplicated UIWindow.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜