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

时间:2012-06-24 20:49:14

标签: ios uiapplicationdelegate email-attachments

在我的应用程序中,viewController管理UIWebView。是使用应用程序的主要Storyboard创建的。此应用程序可以打开rtf电子邮件附件并将其显示到其UIWebView。

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

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

并有一个方法

[viewController loadImportedRTFDocument:url];

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

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

我所观察到的是app委托调用的方法是在控制器收到viewDidLoad消息之前做出的......

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

因此在加载视图之前调用loadImportedRTFDocument。要解决此问题,请存储URL,然后在viewDidLoad将其加载到网络视图中。为了避免在应用程序处于后台时进行双重加载,请在loadImportedRTFDocument处进行切换,只有在初始化webView时才会加载URL。这样,webView应该在viewDidLoadloadImportedRTFDocument加载,具体取决于视图是否已加载。

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