Приложение показывает белый экран при запуске после обновления до iOS 4.2 - PullRequest
3 голосов
/ 24 ноября 2010

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 16 апреля 2011

Я использовал следующий код в - (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 это вызывает проблему. Просто прокомментируйте или удалите этот код, если он у вас есть.

1 голос
/ 10 ноября 2011

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

1 голос
/ 24 ноября 2010

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

Только что обнаружил проблему с помощью фрагмента кода, который я записал из поваренной книги разработчика 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];
}

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

...