Почему presentModalViewController не всегда работает? - PullRequest
1 голос
/ 12 марта 2010

Мое приложение требует данных с сервера для запуска. Первое, что он делает, это отображает контроллер представления (LoadingViewController), который отвечает за проверку, сохранены ли данные в моем PersistentStoreCoordinator. Если данные не кэшируются локально, они получают их с моего сервера, кэшируют и отправляют уведомление, которое прослушивает LoadingViewController. Когда приходит это уведомление, LoadingViewController представляет MainViewController приложения, используя presentModalViewController, с переворачиваемой анимацией. Пока все хорошо ... без ошибок.

Однако, если приложение загружает и определяет, что данные кэшируются, - presentModalViewController не работает, и основное представление приложения никогда не появляется. Нет ошибок Я даже дошел до добавления кнопки в представление «Загрузка», которая выполняет тот же код при нажатии, и эта чертовщина работает.

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

Ответы [ 2 ]

1 голос
/ 13 января 2011

Если у вас есть глубокая иерархия представлений контроллеров представлений, представленных друг другу, то всегда старайтесь сразу представить viewcontroller, чье представление непосредственно добавляется в окно вашего приложения iphone.

Например, У меня было 4 уровня зрения как окно> вид vc1> вид vc2> вид vc3

Так что, когда я пытался вызвать [vc3 presentModalViewController], он не работал .. Я должен был представить с vc1, и это сработало. Я ссылался на vc1 как свойство делегата приложения и, следовательно, мог легко получить к нему доступ.

Но опять же, я до сих пор не нашел фактическую причину, но могу сказать, что это сработало для меня.

0 голосов
/ 23 апреля 2010

Так что я в конечном итоге использовал executeSelector: withObject: afterDelay ([self executeSelector: @selector: @selector (showApp) withObject: nil afterDelay: 0.0];) с задержкой 0, и теперь это работает. Я не в восторге, потому что это кажется очень ленивым и уродливым способом добиться цели - но в основном потому, что я до сих пор не понимаю, почему это не сработало, просто вызвав [self showApp]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...