У меня возникла проблема с моим приложением 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)