在WebView中加载URL时获取NSURLErrorUnsupportedURL(错误代码-1002)

时间:2015-07-12 22:50:21

标签: ios objective-c uiwebview

在我的UITableView中选择了一个单元格后,我将self.itemURL设置为该单元格的相应网址,然后转到WebViewController并加载该网址。

这里是点击一个单元格时发生的逻辑:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (_matchCenterDone == YES) {
        self.itemURL = _matchCenterArray[indexPath.section][@"Top 3"][indexPath.row+1][@"Item URL"];
        NSLog(@"The URL IS:'%@", self.itemURL);
        [self performSegueWithIdentifier:@"WebViewSegue" sender:self];
    }
}

NSLog打印出The URL IS:'http://www.ebay.com/itm/NEW-Sony-XPERIA-Z3-Compact-D5803-FACTORY-UNLOCKED-/131554310432?pt=LH_DefaultDomain_0,告诉我self.itemURL确实存在,并且是格式正确的URL。

在我转到WebViewController之前,我这样做:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"WebViewS egue"]){
        // Opens item in browser
        WebViewController *controller = (WebViewController *) segue.destinationViewController;
        controller.itemURL = self.itemURL;
    }
}

这是WebViewController viewDidLoad函数的样子:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSLog(@"The url in webview is: '%@'", self.itemURL);

    // Initialize UIWebView
    self.myWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 60, self.view.frame.size.width,
                                                                 self.view.frame.size.height)];;
    self.myWebView.delegate = self;
    [self.view addSubview:self.myWebView];


    // set the url
    NSURL *url = [NSURL URLWithString:self.itemURL];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    // make url request
    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
     {
         if ([data length] > 0 && error == nil) {
             [self.myWebView loadRequest:request];
             [activityIndicator stopAnimating];
         }
         else if (error != nil) NSLog(@"Error: %@", error);
     }];

    [self.myWebView setScalesPageToFit:YES]; 
}

上面的NSLog注销The url in webview is: '(null)',控制台会注明错误,说明Error: Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" UserInfo=0x7fcbfa5e7f10 {NSLocalizedDescription=unsupported URL, NSUnderlyingError=0x7fcbfa64bec0 "unsupported URL"}

我的初始视图控制器与WebViewController之间发生的导致self.itemURL的内容是否为空,因此无法加载网址?

1 个答案:

答案 0 :(得分:1)

您的prepareForSegue:方法中的segue标识符字符串中有一个空格:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"WebViewS egue"]){
                                                 // ^ space here
        // Opens item in browser
        WebViewController *controller = (WebViewController *) segue.destinationViewController;
        controller.itemURL = self.itemURL;
    }
}

正在调用WebViewController的实例,但是没有设置其itemURL属性,因为该if语句中的代码没有被执行。

取出空间,它应该有效。