iOS 6 аварийно завершает работу при повороте устройства

ЭТО НЕ ДУБЛИРОВАННЫЙ ВОПРОС. Окончательное рабочее решение еще НЕ предоставлено. Пожалуйста, не ЗАКРЫВАЙТЕ этот вопрос, пока я не приму ответ или не найду и не предоставлю свое собственное решение для этого. Спасибо!

================================================== ================ Используя Xcode 4.5.1, у меня есть приложение с панелью вкладок с 5 вкладками. Каждая вкладка содержит UINavigationController. Таким образом, все приложение необходимо просматривать в портретном режиме, за исключением одного единственного ViewController — «модального» VC, который открывается в полноэкранном режиме и предназначен для просмотра в ландшафтном режиме.

Это прекрасно работало в iOS5 — я просто использовал следующий код в этом конкретном ViewController:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
   return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

Но теперь приложение вылетает и выдает эту ошибку:

Terminating app due to uncaught exception 'UIApplicationInvalidInterfaceOrientation',    
reason: 'preferredInterfaceOrientationForPresentation must return a supported interface orientation!'

Какие-либо предложения?


person sirab333    schedule 01.11.2012    source источник
comment
Ответ здесь: stackoverflow.com/ вопросы/12690963/   -  person keno    schedule 01.11.2012


Ответы (4)


Пожалуйста, проверьте, какую версию xcode вы использовали.

Вы использовали XCODE 4.5: shouldAutorotateToInterfaceOrientation делегат обесценился.

Вы используете следующие строки в своем проекте.

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
    }

-(BOOL)shouldAutorotate
{
    return YES;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationPortrait;
}
person Community    schedule 01.11.2012
comment
Обязательно поместите это в самый верхний viewController в вашем стеке. - person ArtSabintsev; 01.11.2012
comment
не работает. 1) в методе supportedInterfaceOrientations вы возвращаете MaskAll - нужно ли это делать и в P-List? или должен P-List поддерживать только портрет? 2) Когда вы говорите «самый верхний viewController» — это будет UINavigationController или tabBarController? Если это tabBarController, он инициализируется в файле AppDelegate — значит, вы поместили этот код туда, в AppDelegate? - person sirab333; 01.11.2012

Вам нужно использовать это, чтобы избежать сбоя iOS6.

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_6_0
- (NSUInteger)application:(UIApplication*)application supportedInterfaceOrientationsForWindow:(UIWindow*)window
{
    return UIInterfaceOrientationMaskAllButUpsideDown; //Getting error here? then update ur xcode to 4.5+
}
#endif
person Guru    schedule 01.11.2012

Помните одну вещь. В iOS 6

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

не рекомендуется.

Вы не можете использовать его в iOS 6. Для поддержки различной ориентации интерфейса в viewControllers UINavigationController вам необходимо создать подкласс UINavigationController или создать его категорию.

person Evol Gate    schedule 01.11.2012
comment
спасибо - я знаю, что shouldAutorotateToInterfaceOrientation устарел - можете ли вы объяснить, что нужно создать подкласс UINavigationController? Образец кода? Должен ли я делать это для каждого UINavigationController в моем проекте? У меня их десятки... - person sirab333; 01.11.2012
comment
Все, что вам нужно сделать, это подкласс UINavigationController и использовать этот подкласс в качестве контроллера навигации в вашем приложении. Вы должны сделать это только один раз в своем приложении. Взгляните на эту ссылку: wmdeveloper.com/2012 /09/ios-6-and-interface-orientation.html - person Evol Gate; 01.11.2012
comment
Хорошо - я попробую. Это довольно безумно - иметь подкласс UINavigationController. Приходится прыгать через обручи, чтобы заставить что-то, что когда-то было таким простым, снова работать. Как очень Apple. (но спасибо за совет конечно :-)) - person sirab333; 01.11.2012
comment
Это правда, Apple в наши дни сводит разработчиков с ума :) - person Evol Gate; 01.11.2012

Код выглядит нормально. он не должен был падать именно из-за этих методов. проблема может быть в другой части кода. Однако, здесь я хотел бы сказать вам. Методы ориентации выше shouldAutorotateToInterfaceOrientation устарели в iOS 6. если вы хотите узнать больше, как исправить проблему с ориентацией вы должны взглянуть на это

person Kamar Shad    schedule 01.11.2012