1

カスタム URL を処理できるようにUIViewControllerをラップするカスタム サブクラスをデバッグしています。UIWebView

関連するビューを階層に追加しても問題ないようですがloadRequest:、webview を呼び出しても何も表示されません。リクエストを実行しようとさえしていないようです-私のサブクラスはそれ自体をデリゲートとして設定していますがUIWebViewそれからデリゲートコールバックを受け取っていません。何が原因でしょうか?webViewDidStartLoadshouldStartLoadWithRequest

以下は、私のクラスの関連コードです。

- (void)viewDidLoad {
    [super viewDidLoad];

    // add the webview
    m_webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 300, 400)];
    m_webView.delegate = self;
    m_webView.dataDetectorTypes = UIDataDetectorTypeNone;

    // adding a border to see if the view is visible onscreen
    [[m_webView layer] setBorderColor:[[UIColor darkGrayColor] CGColor]];
    [[m_webView layer] setBorderWidth:50];

    [self.view addSubview:m_webView];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:YES];

    NSURLRequest *request = [NSURLRequest requestFromUrl:[NSURL urlFromString:@"http://www.google.com"]];
    [self.m_webView loadRequest:request];
    NSLog(@"Loading URL: %@ in view: %@; delegate set as %@", @"http://www.google.com", m_webView, m_webView.delegate);
    NSLog(@"WebView is %@", self.m_webView.loading ? @"loading" : @"not loading");

}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSLog(@"Loading URL of type %@, relative = %@", [[request URL] scheme], [[request URL] relativeString]);
    return YES;
}

- (void)webViewDidStartLoad:(UIWebView *)webView {
    NSLog(@"Started");
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    NSLog(@"Failed, error %@", error);
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSLog(@"Finished");
    [self finishedReloading];
}

そして、このインスタンスを追加しようとする親ビューのコントローラーからのコード (現在、そのコントローラーの viewDidLoad メソッドにあります):

ZUIWebViewController *testWebView = [[[ZUIWebViewController alloc] initWithAddress:@"deal/recentDrops"] autorelease];
[m_scrollView addSubview:testWebView.view];
[testWebView viewWillAppear:YES];
NSLog(@"Added webview");

これを実行したときの結果は次のとおりです。

Loading URL: http://www.google.com in view: <UIWebView: 0x1114eb30; frame = (0 0; 320 480); layer = <CALayer: 0x1114eb90>>; delegate set as <ZUIWebViewController: 0x1114d7a0>
Webview is not loading
Added webview

「追加された webview」メッセージの後のビュー階層は次のとおりです。

(lldb) po [m_scrollView recursiveDescription]
(id) $1 = 0x0a634b00 <UIView: 0xbba3430; frame = (0 20; 320 460); autoresize = W+H; layer = <CALayer: 0xbba3840>>
   | <UIImageView: 0xbba3490; frame = (0 0; 320 480); userInteractionEnabled = NO; layer = <CALayer: 0xbba3940>>
   | <UIScrollView: 0xbba4390; frame = (0 0; 320 480); clipsToBounds = YES; gestureRecognizers = <NSArray: 0xbba4680>; layer = <CALayer: 0xbba4560>; contentOffset: {0, 0}>
   |    | <UIWebView: 0xbba4840; frame = (0 0; 320 480); layer = <CALayer: 0xbba48a0>>
   |    |    | <_UIWebViewScrollView: 0xbba6b70; frame = (0 0; 320 480); clipsToBounds = YES; autoresize = H; gestureRecognizers = <NSArray: 0xbba6f40>; layer = <CALayer: 0xbba6da0>; contentOffset: {0, 0}>
   |    |    |    | <UIImageView: 0xbba7860; frame = (0 0; 54 54); transform = [-1, 0, -0, -1, 0, 0]; alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba78c0>>
   |    |    |    | <UIImageView: 0xbba77d0; frame = (0 0; 54 54); transform = [0, 1, -1, 0, 0, 0]; alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba7830>>
   |    |    |    | <UIImageView: 0xbba7740; frame = (0 0; 54 54); transform = [0, -1, 1, 0, 0, 0]; alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba77a0>>
   |    |    |    | <UIImageView: 0xbba76b0; frame = (0 0; 54 54); alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba7710>>
   |    |    |    | <UIImageView: 0xbba7620; frame = (-14.5 14.5; 30 1); transform = [0, 1, -1, 0, 0, 0]; alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba7680>>
   |    |    |    | <UIImageView: 0xbba7590; frame = (-14.5 14.5; 30 1); transform = [0, -1, 1, 0, 0, 0]; alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba75f0>>
   |    |    |    | <UIImageView: 0xbba7500; frame = (0 0; 1 30); transform = [-1, 0, -0, -1, 0, 0]; alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba7560>>
   |    |    |    | <UIImageView: 0xbba7470; frame = (0 0; 1 30); alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba74d0>>
   |    |    |    | <UIImageView: 0xbba73e0; frame = (0 450; 320 30); alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba7440>>
   |    |    |    | <UIImageView: 0xbba7380; frame = (0 0; 320 30); transform = [-1, 0, -0, -1, 0, 0]; alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba72e0>>
   |    |    |    | <UIWebBrowserView: 0x13baa200; frame = (0 0; 320 480); gestureRecognizers = <NSArray: 0xbba5d50>; layer = <UIWebLayer: 0xbba4930>>
   |    |    |    |    | <TileHostLayer: 0xbba4a00> (layer)
   |    |    |    |    |    | <TileLayer: 0xbba7ef0> (layer)

UIWebViewそのため、表示しようとしているの前に何もないようです。

これを引き起こしている可能性がありますか? デバッグするために他に必要な手順はありますか?

4

1 に答える 1

0

viewWillAppear で webview をロードし、後で viewDidLoad (viewWillAppear の後に呼び出されます) で webview を作成しています。これは逆であるべきです。webview を作成してから、リクエストをロードします。

すべてをviewDidLoadに保持するか、ビューが表示され、webviewを作成し、リクエストをロードします。これはうまくいくはずです。

于 2013-04-23T12:01:07.987 に答える