2015-02-10 2 views
0

У меня возникла проблема с моим iOS Swift App, и я не могу решить это сам часами. У меня есть 3 View Controller:MFMessageComposeViewController непризнанный селектор, отправленный в экземпляр

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

В View 3 У меня есть UITableView с моим Addressbook Контакты. При выборе MFMessageComposeViewController откройте окно Message. Если я нажимаю кнопку отправки/отмены, MFMessageComposeViewController исчезает, и я могу выбрать следующий Контакт.

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

Но когда я вкладка назад Просмотр 1 и перейти к View 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... 
    } 
} 

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

Update:

Я забыл: На свежем перспективе: Когда я иду в деталях (View 2) назад к обзору (View 1) и снова к контактам (View 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) 
} 

Update # 2: приложения аварий на линии controller.dismissViewControllerAnimated(true, completion: nil)

+0

Это происходит в симуляторе или реальном устройстве? У меня было несколько подобных проблем с Mail composer в симуляторе, но на устройстве он отлично работал ... – Miknash

+0

На реальном устройстве (iOS 8.1.3) - я проверю Симулятор. –

+0

Да, на Симуляторе тоже ... –

ответ

0

Я думаю, что я получил его ...

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

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

Похоже на работу ...