我的智慧结束了。当我的应用程序转换到后台时,我需要关闭MFMailComposeViewController
而我无法执行此操作。它最终会创建一个尴尬的应用程序状态。
有没有办法以编程方式处理此问题?也许强制视图控制器将电子邮件放入“草稿”文件夹并在没有动画的情况下关闭?
编辑:
对- dismissModalViewControllerAnimated:
的调用无法按预期工作。
我正在谈论的尴尬的应用程序状态是当应用程序从后台返回时,我的主视图被重绘在电子邮件编写器的顶部。模式永远不会被解雇,电子邮件编写器永远不会再被访问。
编辑:
初始化程序中的代码:
// For compatibility with iOS versions below 4.0
if (&UIApplicationDidEnterBackgroundNotification != NULL)
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackgroundNotification:) name:UIApplicationDidEnterBackgroundNotification object:nil];
}
我的后台条目处理程序中的代码:
- (void) applicationDidEnterBackgroundNotification:(NSNotification *)note {
// Do some other stuff here
// According to the docs, calling the method like this closes all
// child views presented modally
[self dismissModalViewControllerAnimated:NO];
}
答案 0 :(得分:0)
我使用上面的代码复制了一个简单的应用程序。当应用程序进入后台时,邮件编辑器将被正确解除。
因此我只能假设你的代码的//Do some other stuff here
部分做了太多的事情,并且在你有机会解雇作曲家之前操作系统正在关闭你。
根据docs:
在此方法退出之前,您应该执行与调整用户界面相关的任何任务,但是应根据需要将其他任务(例如保存状态)移动到并发调度队列或辅助线程。因为您可能在applicationDidEnterBackground中启动任何后台任务:在该方法退出之前不会运行,您应该在启动这些任务之前请求额外的后台执行时间。换句话说,首先调用beginBackgroundTaskWithExpirationHandler:然后在调度队列或辅助线程上运行任务。
也许你应该把你的其他东西移到另一个线程或请求额外的时间?如果删除其他内容,作曲家是否会正确解散?