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

Getting NSURLErrorUnsupportedURL (error code -1002) when loading a url in WebView

当在我的 UITableView 中选择一个单元格时,我将 self.itemURL 设置为该单元格各自的 URL,然后转到 WebViewController 并加载 URL.

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

- (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;
    }
}

这是 WebViewControllers 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 变为空,因此无法加载 url?

prepareForSegue: 方法中的 segue 标识符字符串中有一个 space:

- (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 属性 没有被设置,因为如果语句未被执行。

取出 space 应该可以了。