Приложение показывает белый экран при запуске после обновления до iOS 4.2

В течение последних нескольких недель я работал над приложением, использующим класс SoundManager, который я нашел в комментариях к этому сообщению в блоге: http://www.gehacktes.net/2009/03/iphone-programming.-part-6-multiple-sounds-with-openal/

Ссылка на приложение SoundManager и тестер содержится в комментариях Дэвида Эванса. Мне не разрешено предоставлять вторую ссылку, поэтому я упомяну имя ZIP-файла, на который он ссылается: SoundTester.zip

Я был очень доволен этим кодом, пока не вышла iOS 4.2. После обновления моего iPad и Xcode соответственно мои приложения, использующие класс SoundManager, отображают только панель навигации с ее заголовком. Остальная часть экрана белая. Это не специфическое поведение iPad. Я видел то же самое на iPhone4 и iPhone 3G, которые были обновлены до iOS 4.2.

При запуске приложений в симуляторе я получаю те же результаты. Проблема в том, что я не получаю сообщений об ошибках в окне консоли, а также ошибок сборки и компиляции. Очень разочаровывает и очень трудно исправить для разработчика iPhone, который начал использовать iPhone SDK всего несколько месяцев назад.

Кто-нибудь знает, что могло сломаться и как это починить? Любая помощь приветствуется!


person Crow74    schedule 24.11.2010    source источник


Ответы (3)


Кто-нибудь, пожалуйста, застрелите меня...

Только что нашел проблему с помощью фрагмента кода, который я записал из Поваренной книги разработчика iPhone.

Проблема была не в SoundManager (который, к счастью, до сих пор отлично работает!), а в методе application: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];
}

Этот фрагмент кода регистрирует все вызываемые методы.

person Crow74    schedule 24.11.2010

Я использовал следующий код в методе (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

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

Этот метод вызвал белый экран, когда я запустил свое приложение. В SDK 3.2/4.0 было нормально. В SDK 4.3 это вызывает проблему. Просто прокомментируйте или удалите этот код, если он у вас есть.

person Porosh Khan    schedule 16.04.2011

У меня была такая же проблема. Проблема была в дублировании UIWindow.

person altosh    schedule 10.11.2011
comment
Огромное спасибо. Это указало мне на право исправить дурацкую ошибку. - person braden; 04.09.2013