Неопознанный селектор MFMessageComposeViewController отправлен экземпляру

У меня возникла проблема с моим приложением Swift для iOS, и я не могу решить ее самостоятельно в течение нескольких часов. У меня есть 3 контроллера просмотра:

View 1 (List) ---> View 2 (Detail) ---> View 3 (Contacts)

В представлении 3 у меня есть UITableView с контактами из адресной книги. При выборе MFMessageComposeViewController откройте окно сообщения. Если я нажму «Отправить/отменить», MFMessageComposeViewController исчезнет, ​​и я смогу выбрать следующий контакт.

Когда я возвращаюсь к представлению 2 и снова перехожу к представлению 3 или когда я остаюсь на представлении 3, нет проблем с выбором одного контакта за другим и отправкой сообщения.

Но когда я возвращаюсь к представлению 1 и снова перехожу к представлению 3, я выбираю контакт, открывается MFMessageComposeViewController, и теперь, когда я нажимаю отправить/отменить, я получаю очень странные ошибки:

Run 1: ...[__NSCFType numberOfSectionsInTableView:]: unrecognized selector sent to instance 0x17578c90...
Run 2: ...[UIScrollView numberOfSectionsInTableView:]: unrecognized selector sent to instance 0x14d88860...
Run 3: ...[__NSCFData numberOfSectionsInTableView:]: unrecognized selector sent to instance 0x1466af80...
Run 4: ...[UITableViewWrapperView numberOfSectionsInTableView:]: unrecognized selector sent to instance 0x16ebf910...
Run 5: ...[__NSCFDictionary numberOfSectionsInTableView:]: unrecognized selector sent to instance 0x17ea9920...

Каждый прогон — это испытание со сбоем. Как видите, все ошибки разные.

Части моего кода:

...
let msgComposerVC = MFMessageComposeViewController()
msgComposerVC.messageComposeDelegate = self
msgComposerVC.navigationBar.tintColor = UIColor.whiteColor()
msgComposerVC.navigationBar.barStyle = UIBarStyle.Black
msgComposerVC.recipients = ["\(phoneNumber)"]
msgComposerVC.body = body
if MFMessageComposeViewController.canSendText() {
    self.presentViewController(msgComposerVC, animated: true, completion: {
        UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: false)
    })
}

...

func messageComposeViewController(controller: MFMessageComposeViewController!, didFinishWithResult result: MessageComposeResult) {
    controller.dismissViewControllerAnimated(true, completion: nil)
    if(result.value == MessageComposeResultSent.value) {
        // Send .. do something...
    }
}

Спасибо за помощь!

Обновлять:

Я забыл: при новом запуске: когда я перехожу к подробностям (представление 2), обратно к обзору (представление 1) и снова к контактам (представление 3), а затем пытаюсь отправить первое сообщение любому контакту, возникает та же ошибка.

Вот код, как я переключаю представления:

// Change view from View 1 to View 2
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewControllerWithIdentifier("View2Controller") as View2Controller
    vc.event = self.events[indexPath.row] // processing Data to VC
    self.showViewController(vc as UIViewController, sender: vc)
}

// Change view from View 2 to View 3
@IBAction func switchViewFunc(sender: AnyObject) {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewControllerWithIdentifier("View3Controller") as View3Controller
    vc.event = self.event as NSManagedObject // processing Data to VC
    self.showViewController(vc as UIViewController, sender: vc)
}

Обновление № 2: приложение аварийно завершает работу в строке controller.dismissViewControllerAnimated(true, completion: nil)


person Kevin Lieser    schedule 10.02.2015    source источник
comment
Это происходит в симуляторе или на реальном устройстве? У меня было несколько подобных проблем с Mail composer в симуляторе, но на устройстве все работало отлично...   -  person Miknash    schedule 10.02.2015
comment
На реальном устройстве (iOS 8.1.3) - проверю Симулятор.   -  person Kevin Lieser    schedule 10.02.2015
comment
Да и на Симуляторе тоже...   -  person Kevin Lieser    schedule 10.02.2015


Ответы (1)


я думаю у меня получилось...

Проблема была не в MFMessageComposeViewController или controller.dismissViewControllerAnimated(true, completion: nil).

В View 2 и View 3 я создаю настраиваемые всплывающие окна в NavigationController. Я сделал это в viewDidLoad. Теперь я создаю эти всплывающие окна в viewWillAppear и удаляю подпредставления из представления NavigationControllers в viewWillDisappear.

Кажется, работает...

person Kevin Lieser    schedule 10.02.2015