我正在使用MFMailComposeViewController在我的应用中的三个不同视图控制器中发送电子邮件。在iOS 7.1 / 7.0设备上运行的所有控制器中,应用程序运行都没有问题。在iOS 8(在设备上),当我尝试仅在其中一个控制器(其他控制器仍在工作)中关闭委托方法中的邮件控制器时,应用程序崩溃。如果我通过使用来自控制器的segue添加一个测试控制器崩溃我然后可以呈现和解除邮件控制器,但如果我然后尝试弹出新的测试控制器,则应用程序崩溃时会出现同样的问题。崩溃日志指示正在获取与tableview相关的已发送消息的随机对象,例如:
[UITraitCollection numberOfSectionsInTableView:]: unrecognized selector sent to instance 0x176061380
错误显示对象发生变化,所以在这种情况下说UITraitCollection,但其他时间可能会显示 CALayer或其他一些随机对象。
搜索结果似乎表明此问题已修复MFMailComposeViewController in Swift does not dismiss,但显然不是这种奇怪的情况。 我已经尝试将邮件控制器添加为属性,并按照MFMailComposeViewController in Swift does not dismiss添加为全局,但这并不能解决问题,这并不奇怪,因为我得到的错误与此错误不同。
我提供邮件控制器的代码是
func showMailController(productGroupName: String, manufacturer: String, pn: String, name: String, companyName: String, userName: String) {
let mailComposer = MFMailComposeViewController()
mailComposer.mailComposeDelegate = self
mailComposer.setToRecipients(["test@test.com"])
mailComposer.setSubject("subject")
let con = "Hello!"
mailComposer.setMessageBody(con, isHTML: false)
self.presentViewController(mailComposer, animated: true, completion: nil)
}
我的委托方法是:
extension CompetitiveXREFViewController: MFMailComposeViewControllerDelegate {
func mailComposeController(controller: MFMailComposeViewController!, didFinishWithResult result: MFMailComposeResult, error: NSError!) {
controller.dismissViewControllerAnimated(false, completion: nil)
}
} (我也试过self.dissmiss ..并使用保存邮件控制器属性self.mailController.dissmiss ..)
它的行为好像邮件控制器正在被释放,然后随机的tableview消息被发送到该地址,但我确实尝试将邮件控制器保存在属性和全局变量中。再一次,如果我将邮件控制器显示移动到一个新的控制器然后我可以显示并解除它,但任何尝试然后关闭新的常规视图控制器(通过segue呈现)也会使用随机对象获取tableview方法崩溃应用程序