应用程序从 iOS 中的电子邮件附件启动时的顺序

Posted

技术标签:

【中文标题】应用程序从 iOS 中的电子邮件附件启动时的顺序【英文标题】:Sequence when application launches from email attachment in iOS 【发布时间】:2012-06-24 20:49:14 【问题描述】:

在我的应用程序中,一个 viewController 管理一个 UIWebView。是使用应用程序的主故事板创建的。此应用能够打开 rtf 电子邮件附件并将其显示到其 UIWebView。

当应用程序在后台时,一切正常。应用程序委托方法

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

被调用并且有一个方法

[viewController loadImportedRTFDocument:url];

被调用。控制器加载文档并显示它。

当用户在邮件应用程序中选择附件时应用程序不在后台时,它会正确启动。调用 App 委托 openURL,viewController 接收到加载导入文档的消息。但它无法显示它,因为 UIWebView 尚未分配(返回 nil 指针)。

我观察到的是,应用委托调用的方法是在控制器收到 viewDidLoad 消息之前生成的......

在这种情况下如何确定 viewController 已正确初始化,我应该在哪里要求 UIWebView 加载与 rtf 附件关联的 NSData 对象?

【问题讨论】:

你是要使用同一个viewController来显示所有的文档还是要为每个文档重新分配? 是的,为了节省内存,只有一个viewController处理一个UIWebView。控制器在必要时在视图中加载文档 html 内容。该视图应该在加载描述主视图界面的故事板文件时进行分配初始化。 【参考方案1】:

您可以使用NSObject 的 performSelector 在运行循环结束时调用loadImportedRTFDocument(即在应用程序完全加载并处于空闲状态之后):

// Will be called after app has loaded
[viewController performSelector:@selector(loadImportedRTFDocument:) withObject:url afterDelay:0];

【讨论】:

对不起,我可能是个白痴,我不明白你的意思......我试过了,但不成功......没有效果 您是否将[viewController loadImportedRTFDocument:url 替换为[viewController performSelector:@selector(loadImportedRTFDocument:) withObject:url afterDelay:0];?如果你这样做了,你能检查一下 viewController 是否不是 nil... viewController 永远不会是零。这是它的 UIWebView 属性,在任何经过​​测试的情况下都返回 nil,包括你描述的那个......我不能在这里进一步讨论,因为解决方案应该依赖于 ios 6,并且在其正式发布之前有一个 NDA。跨度> 你用什么方法初始化你的网页视图?还是用笔尖完成的? 好的,我对故事板没有任何经验,但是使用 nib,您需要将视图链接到属性...您是否将编辑器中的 UIWebView 链接到您班级的 webView 属性? (假设故事板的工作方式与界面构建器相同......)【参考方案2】:

所以loadImportedRTFDocument 在视图加载之前被调用。要解决它,请存储URL,然后在viewDidLoad 将其加载到网络视图中。为避免应用程序在后台时重复加载,请在loadImportedRTFDocument 处进行切换,这将仅在 webView 初始化时加载 URL。这样,webView 应该加载到viewDidLoadloadImportedRTFDocument,具体取决于是否加载了视图。

此解决方案还将(如果 URL 仍然有效且资源仍然存在)使您的 webView 显示数据,即使 webView 已卸载 memoryWarning。

【讨论】:

以上是关于应用程序从 iOS 中的电子邮件附件启动时的顺序的主要内容,如果未能解决你的问题,请参考以下文章

iOS12系统应用发送邮件中的附件

使用 iOS 中的共享扩展从 Mail App 共享附件

iOS 真的会在邮件附件中禁用 JavaScript 吗?

从 Shiny 发送附件

根据文件附件条件从 python 发送自动电子邮件

Xamarin EmailAttachment 不在 iOS 上添加附件