3

背景: 広告サポート付きの無料アプリを入手しました。基本的な考え方は、アプリが起動されると、広告コンテンツ (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];-正しい方法でやりたいのです。

それともこれでいいの?「うまくいくならそれでいい」という人もいると思いますが、そうではないことはわかっています。

4

0 に答える 0