在我的应用程序中,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对象?
答案 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应该在viewDidLoad
或loadImportedRTFDocument
加载,具体取决于视图是否已加载。
此解决方案也将(如果URL仍然有效并且资源仍然存在)使您的webView显示数据,即使在使用memoryWarning卸载webView时也是如此。