背景: 広告サポート付きの無料アプリを入手しました。基本的な考え方は、アプリが起動されると、広告コンテンツ (HTML) がサーバーからバックグラウンドでダウンロードされ、ダウンロードが成功した場合にのみコンテンツが表示されるというものです。
以前の解決策:
これをユニバーサル アプリに正常に実装しました。もともと、NSData
変数に URL をロードし、それが成功した場合は、UIWebView
(関連するコードは別の質問にあります) を含むモーダル ビューを表示しました。問題は、外部アセット (画像) が元のリクエストで読み込まれないことですNSData
。そのため、天才的なアイデアで別の方法を考えました。
新しい解決策:
私が助けてほしい新しい方法は、(まだ表示せずに) モーダル ビュー コントローラーをインスタンス化し、Web ビューに URL の直接の読み込みを開始させることです。webViewDidFinishLoad
メソッドが呼び出されると、親に通知が返され、親はpresentModalViewController
.
View Controller をインスタンス化し、モーダルに表示するメソッドは次のとおりです。
- (void)launchAd
{
if ([ServerCheck serverReachable:@"openx.freewave-wifi.com" hideAlert:YES])
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(presentAdModal) name:@"AdLoaded" object:nil];
AdViewController *adView = [[AdViewController alloc] initWithNibName:nil bundle:nil];
[[adView view] awakeFromNib]; //THIS LINE IS WHAT THIS QUESTION IS ABOUT
navController = [[UINavigationController alloc] initWithRootViewController:adView];
[adView release], adView = nil;
[navController setModalPresentationStyle:UIModalPresentationFormSheet];
[navController setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[[navController navigationBar] setTintColor:[UIColor colorWithRed:0.94 green:0.00 blue:0.32 alpha:1.00]];
}
else
LogError(@"Not presenting ad.");
}
- (void)presentAdModal
{
LogInfo(@"Presenting advertisement modal.");
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"AdLoaded" object:nil];
[tabBarController presentModalViewController:navController animated:YES];
[navController release];
}
そして AdView コントローラーで:
- (void)webViewDidFinishLoad:(UIWebView *)theWebView
{
LogInfo(@"Ad content did load; we can show it.");
[timeout invalidate], timeout = nil;
[self setTitle:@"From Our Sponsor"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"AdLoaded" object:nil];
}
今、上記はうまくいきます。ただし、を呼び出す前AdView
に、コントローラー内のビュー コントローラー デリゲート メソッドを起動する方法を理解するのに長い時間がかかりました。を追加してこれを行いましたが、これがこれを実現する正しい方法ではないことはわかっています。presentModalViewController
[[adView view] awakeFromNib];
したがって、上記のすべてが美しく機能し、表示する前にView ControllerとそのUIWebView
「プリロード」を効果的に行うことができます。代わりに何をすべきかを知りたいだけです[[adView view] awakeFromNib];
-正しい方法でやりたいのです。
それともこれでいいの?「うまくいくならそれでいい」という人もいると思いますが、そうではないことはわかっています。