0

私のアプリケーションでは、viewControllerがUIWebViewを管理します。アプリケーションのメインストーリーボードで作成されます。このアプリは、rtfメールの添付ファイルを開いて、UIWebViewに表示することができます。

アプリケーションがバックグラウンドにある場合、すべてがOKです。アプリケーションデリゲートメソッド

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

が呼び出され、そこにメソッドがあります

[viewController loadImportedRTFDocument:url];

と呼ばれます。コントローラがドキュメントをロードして表示します。

ユーザーがメールアプリで添付ファイルを選択したときにアプリケーションがバックグラウンドにない場合、アプリケーションは正しく起動します。アプリデリゲートopenURLが呼び出され、viewControllerはインポートされたドキュメントをロードするためのメッセージを受信します。ただし、UIWebViewが割り当てられていないため、表示できません(nilポインターを返します)。

私が観察したのは、コントローラーがviewDidLoadメッセージを受信する前にアプリデリゲートによって呼び出されるメソッドが作成されることです...

この状況でviewControllerが正しく初期化されていることを確認するにはどうすればよいですか?また、UIWebViewにrtf添付ファイルに関連付けられたNSDataオブジェクトをロードするように依頼する必要がありますか?

4

2 に答える 2

0

ビューloadImportedRTFDocumentが読み込まれる前に呼び出されます。これを解決するには、 を保存してから、Web ビューURLviewDidLoadロードします。アプリがバックグラウンドにあるときの二重読み込みを回避するにはloadImportedRTFDocument、webView が初期化されている場合にのみ URL を読み込むスイッチを作成します。このように、ビューがロードされているかどうかに応じて、webView を atviewDidLoadまたは at でロードする必要があります。loadImportedRTFDocument

このソリューションは、(URL がまだ有効で、リソースがまだ存在する場合)、webView が memoryWarning でアンロードされた場合でも、webView にデータを表示します。

于 2012-06-27T18:28:49.830 に答える
0

NSObjectの performSelector を使用して、呼び出しをloadImportedRTFDocument実行ループの最後に置くことができます (つまり、アプリが完全にロードされてアイドル状態になった後)。

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