Кто-нибудь, пожалуйста, стреляйте в меня ...
Только что обнаружил проблему с помощью фрагмента кода, который я записал из поваренной книги разработчика iPhone.
Проблема была не в SoundManager (который, к счастью, все еще работает отлично), а в приложении: didFinishLaunchingWithOptions: метод в классе App Delegate.
Вот код, который вызывает проблему в 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];
}
Этот фрагмент кода регистрирует все вызываемые методы.