0

在我的应用程序中,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 对象?

4

2 回答 2

0

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

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

于 2012-06-27T18:28:49.830 回答
0

您可以使用NSObjectperformSelector 将调用置于loadImportedRTFDocument运行循环的末尾(即在应用程序完全加载并处于空闲状态之后):

// Will be called after app has loaded
[viewController performSelector:@selector(loadImportedRTFDocument:) withObject:url afterDelay:0];
于 2012-06-25T19:32:36.803 回答