MFMailComposeViewController из всплывающего окна

#ipad #uipopovercontroller

#iPad #uipopovercontroller

Вопрос:

У меня есть UIViewController, отображаемый как всплывающее окно в моем приложении для iPad. Внутри него у меня есть кнопка, которая запускает MFMailComposeViewController для отправки электронной почты. Однако в настоящее время, похоже, он ничего не делает, хотя, если я сделаю этот контроллер просмотра не всплывающим, он работает нормально. Я предполагаю, что это потому, что я пытаюсь запустить один модальный экран из другого, поэтому мой вопрос: есть ли способ сделать это? Каково приемлемое взаимодействие здесь?

Если я попытаюсь сначала закрыть свое модальное всплывающее окно, а затем отобразить MFMailComposeViewController, оно отключит всплывающее окно, и ничего не произойдет. Я попытался подключить контроллер верхнего вида MFMailComposeViewController, поскольку это UINavigationController, к контроллеру навигации моего всплывающего окна, и я обновил панель навигации до нужного состояния, но без элементов управления. Он также разбился, когда я нажал «Отмена»:

 -[NSPathStore2 _closeButtonClicked:]: unrecognized selector sent to instance 0xc602f70
(gdb) bt
0  0x020fa2f9 in objc_exception_throw ()
1  0x01fa80bb in -[NSObject(NSObject) doesNotRecognizeSelector:] ()
2  0x01f17966 in ___forwarding___ ()
3  0x01f17522 in __forwarding_prep_0___ ()
4  0x008994fd in -[UIApplication sendAction:to:from:forEvent:] ()
5  0x00aabcc3 in -[UIBarButtonItem(UIInternal) _sendAction:withEvent:] ()
6  0x008994fd in -[UIApplication sendAction:to:from:forEvent:] ()
7  0x00929799 in -[UIControl sendAction:to:forEvent:] ()
8  0x0092bc2b in -[UIControl(Internal) _sendActionsForEvents:withEvent:] ()
9  0x0092a7d8 in -[UIControl touchesEnded:withEvent:] ()
10 0x008bdded in -[UIWindow _sendTouchesForEvent:] ()
11 0x0089ec37 in -[UIApplication sendEvent:] ()
12 0x008a3f2e in _UIApplicationHandleEvent ()
13 0x02597992 in PurpleEventCallback ()
14 0x01f87944 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
15 0x01ee7cf7 in __CFRunLoopDoSource1 ()
16 0x01ee4f83 in __CFRunLoopRun ()
17 0x01ee4840 in CFRunLoopRunSpecific ()
18 0x01ee4761 in CFRunLoopRunInMode ()
19 0x025961c4 in GSEventRunModal ()
20 0x02596289 in GSEventRun ()
21 0x008a7c93 in UIApplicationMain ()
22 0x00002c9e in main (argc=1, argv=0xbffff000) at /Users/abushnaq/AccurevWorkspaces/Future_Core_Integration_iphone/iPhoneClient/main.m:15
  

и ничего из этого отслеживания стека нет в коде, который я написал.

Есть идеи?

Ответ №1:

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