在 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;
}
}
这是 WebViewController
s 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 应该可以了。
当在我的 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;
}
}
这是 WebViewController
s 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 应该可以了。