Подтвердить что ты не робот

UIAlertView вызывает сбой в iOS SDK 6.0

Недавно я представил приложение в App Store, которое еще не принято. Между тем, я скачал Xcode 4.5 и протестировал свое приложение в iPhone 6.0 Simulator.

Однако, когда я намереваюсь показать UIAlertView, приложение вылетает на строку [myAlertView show] с ошибкой EXC_BAD_ACCESS. Он отлично работает с iPhone 5.1 Simulator.

Здесь мой код:

UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"Are you sure?" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil];
[myAlertView show];  

Это нормально? Что я делаю неправильно с моим кодом?

Также, как вы думаете, я должен отправить свое приложение в Apple? (просто прошу совета)

Спасибо заранее.

Изменить: Apple отклонила приложение из-за аварии iOS 6.

4b9b3361

Ответ 1

Смотрите этот вопрос: UIAlertView, показанный из фонового потока и без делегата, создает EXC_BAD_ACCESS

Пользовательский ввод и вызовы пользовательского интерфейса должны поступать из основного потока. Многие из них будут работать "больше всего" времени на других потоках, но иногда будут разбиваться. Они более склонны к потере (более или менее часто) на устройстве, чем симулятор, но возможно, что Apple внесла изменения, которые влияют на эту разницу в iOS6.

И к вашему второму вопросу, я бы ответил "да", я бы загрузил обновленный двоичный файл для проверки, как только вы исправили проблему, особенно если вы можете воспроизвести это на устройстве (я настоятельно рекомендую вам попытаться воспроизвести его на Устройство). В противном случае вы можете: A) принять с ошибкой, которую ваши пользователи ненавидят, или B) получить отклонение и иметь еще более длительную задержку и, возможно, более тщательное рассмотрение. Если вы отправляете обновленный бинарный файл перед завершением обзора, он помещает вас в "спину строки" AFAIK, но лучше, чем альтернативы.

Ответ 2

Удалите этот метод и используйте другой метод:

 [myAlertView show];  

Попробуйте этот метод:

 [myAlertView performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES];