UIWebView不会在单独的类文件中加载Request

时间:2012-09-19 17:45:10

标签: objective-c ios xcode uiwebview uiwebviewdelegate

我有一个UIWebView成功地从包含的类文件中动态创建(我认为......没有错误被吐出)。我在Foo.m类文件中创建此webview的函数是:

+(void) openWebView {
  dispatch_async(dispatch_get_main_queue(), ^{
    UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 16, 16)];
    [webView setDelegate:self];
    [webView setHidden:YES];
    NSURL *url = [NSURL URLWithString:address];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
    [webView loadRequest:urlRequest];
    NSLog(@"Successful web open: ", url); 
  });
}

我在setDelegate行(虽然不会使应用程序崩溃)上收到警告错误消息,内容如下:

  

不兼容的指针类型将'const Class'发送到'id:< UIWebViewDelegate>'类型的参数

问题是虽然NSLog确实记录了它正在尝试打开的正确URL,但页面实际上永远不会被调用(我可以告诉它,因为我在该页面上有一个PHP计数器,每次都会增加打开了。)

所以我的问题是:

  1. 我错过了.h文件中的内容吗?我没有添加任何内容 尊重这个新的WebView
  2. 我觉得我错过了self引用的对象。它也被提到了here in my precursor question
  3. 如何查看loadRequest
  4. 的回复

    对不起大家,正如你可能从我的问题中弄清楚的那样,Obj-C对我来说有点新鲜,但我真的在这里苦苦挣扎并且非常感谢你的帮助!感谢。

2 个答案:

答案 0 :(得分:1)

您正在实现一个类方法(由+符号表示)。类方法中的self引用类本身,而不是实例。 delegate(或其他任何东西)的UIWebView必须是一个对象。

答案 1 :(得分:1)

您的openWebView方法是一种类方法,因为开头是+。因此,您没有对象。在这种情况下,self返回类(因此警告)。也许您希望openWebView成为实例方法,因此将+更改为-,然后self将指向您的实例化对象。

要检查loadRequest是否有效,请在委托中实现UIWebViewDelegate委托方法webViewDidStartLoadwebViewDidFinishLoad(即Foo.m)并查看它们是否被调用。