Автоповорот перестал работать после обновления до MonoTouch 6

Я сделал проект с MonoTouch 5. После обновления до MonoTouch 6 мои UIViewController больше не вращаются автоматически. Они размещены внутри tabviewcontroller. Я получаю это предупреждение:

ShouldAutorotateToInterfaceOrientation(MonoTouch.UIKit.UIInterfaceOrientation)' overrides obsolete member `MonoTouch.UIKit.UIViewController.ShouldAutorotateToInterfaceOrientation(MonoTouch.UIKit.UIInterfaceOrientation)'. Add the Obsolete attribute to ShouldAutorotateToInterfaceOrientation(MonoTouch.UIKit.UIInterfaceOrientation)' (CS0672) 

Но метод по-прежнему вызывается при отладке. Новый ShouldAutorotate никогда не вызывается. Любые идеи? Спасибо!


person vbisbest    schedule 25.01.2013    source источник
comment
И на самом деле это только при тестировании iOS 5.1. iOS 6.0 работает как положено. Как вы справляетесь с вращением для обоих? Спасибо.   -  person vbisbest    schedule 25.01.2013


Ответы (2)


Причин может быть несколько. Один из них заключается в том, что вы должны (если еще не сделали этого) установить RootViewController в вашем AppDelegate (другая ссылка здесь< /а>). Это не требовалось до iOS6.

Другой начинает использовать новый API iOS6, не сохраняя запасной вариант для более ранних версий iOS. Это соответствует вашему комментарию, т. е. работает на 6.0, но не на 5.1.

Обратите внимание: поскольку вы по-прежнему ориентируетесь на iOS 5.x, вы можете безопасно игнорировать устаревшие предупреждения. В iOS 6 появился новый API для обработки ротации, но он автоматически откатится к старому API, чтобы сохранить совместимость с существующими приложениями.

Это также означает, что если вы начнете использовать новый (только для iOS6) API, вам придется самостоятельно обрабатывать старый API, иначе ротация не будет работать с iOS 5.x.

Честно говоря, я думаю, что это кошмар тестирования - вам лучше позволить iOS справиться с этим и сохранить единый путь кода для обработки ротации. Вот почему я настоятельно рекомендую вам продолжать использовать старый API, пока минимальная версия вашей цели развертывания не станет iOS 6.0.

person poupou    schedule 25.01.2013
comment
Ок, хорошо. Я думаю, тогда нет ротации для пользователей 5.x. Спасибо за подробности. - person vbisbest; 26.01.2013
comment
ухо! Я думаю, вы меня неправильно поняли. Вы можете заставить ротацию работать на оба iOS 5.x и 6.0, используя API, доступный на iOS5 (т. е. не используйте API только для iOS6). - person poupou; 26.01.2013

У меня была такая же проблема после обновления, и я получил ответ на свою проблему здесь. Вот суть проблемы, цитата из ссылки:

Ожидается, что окна приложений будут иметь корневой контроллер представления в конце запуска приложения.

Итак, если ранее, как и я, у вас было это в вашем методе FinishedLaunching (приложение UIApplication) в main.cs:

окно.AddSubview(mainVC.View);

Замените его на это:

окно.RootViewController = mainVC;

Вот и все! Счастливые дни! Вращение снова работает. :) По крайней мере, это решило проблему для меня.

Я не знаю, является ли эта маленькая вещь, вызывающая сбой в работе приложения, ошибкой Apple или ошибкой Monotouch/Xamarin, но я думаю, что команда Xamarin должна что-то с этим сделать. Наверняка это можно обнаружить и исправить во время компиляции?

Так или иначе. Надеюсь, эта информация сэкономит другим людям часы, которые эта проблема стоила мне!

person BruceHill    schedule 08.08.2013