【问题标题】:Web page didn't open in iOS app网页未在 iOS 应用中打开
【发布时间】:2014-05-31 18:07:49
【问题描述】:

我有一个包含 XML 文件的 iOS 应用程序,其中包含应用程序的数据。该文件包含网页的链接。出于某种原因,当我尝试使用UIWebView 显示此链接时,它没有显示。有黑色矩形的白屏-

我知道这个问题出在我的网络链接中,但是当我尝试在 Mac 或 Windows 浏览器中打开它时它完全正确(事实上,我只是从 Wiki 复制粘贴它)。比如有我的一个链接:http://ru.wikipedia.org/wiki/Московский_Кремль

还有我的代码。很简单,但是当我使用其他链接测试它时它确实有效,例如:http://apple.com

代码如下:

-(void)loadWebView{

    NSURL *urlik = [NSURL URLWithString:self.entityLinkToWiki];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:urlik];
    [self.myWebView loadRequest:requestObj];        
}

// 注意:self.entityLinkToWiki 看起来如上图 - http://ru.wikipedia.org/wiki/Московский_Кремль

当然,我只是不想强迫用户退出应用程序并在 Safari 中打开链接。有没有办法在内部浏览器中显示我存储的网络链接?为什么会出现这种奇怪的错误?我的意思是链接,在 PC/Mac 浏览器中相当不错的链接在这里不起作用?

已更新。

伙计们,这是我的错,非常抱歉让您感到困惑,并感谢您的帮助。问题就在这里:当我尝试将链接字符串从一个控制器传递到另一个控制器时,它以某种方式丢失了部分文本,最后是 self.entityLinkToWiki = Московский_Кремль,而不是应该的 http://ru.wikipedia.org/wiki/Московский_Кремль

我的应用程序具有表视图的结构,首先,它加载表视图,然后它从依赖于 indexPath.row 的 XML 传递值。除了网络链接之外的所有值都可以正常工作,我将解释我这样做的方式。根据您的要求,xml 文件中有部分网络链接:

<webpage>http://ru.wikipedia.org/wiki/Московский_Кремль</webpage>

为此,我做了以下操作:

在“第一个”(tableView 列表)控制器中,我传递这样的值:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{


if ([segue.identifier isEqualToString:@"detailSegue"]){
    NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
    NSString *string = [[self.listOfPlaceDetails objectAtIndex:indexPath.row]objectForKey:@"description"];
    DetailViewController     *detailController =  segue.destinationViewController;
    detailController.descriptionStringShort  =string;

   ....a lot of code here

    detailController.fourthPhotoString = [[self.listOfPlaceDetails objectAtIndex:indexPath.row] objectForKey:@"imageFourth"];

    detailController.webLink = [[self.listOfPlaceDetails objectAtIndex:indexPath.row]
        objectForKey:@"webpage"];
}   
}

图片链接与网页链接无关,我只是发布它,所以你会得到图片,我以这种方式传递值并且它工作正常。然后,我将值从“详细”控制器传递到控制器,最终具有 UIWebView:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

   .... a lot of code here

    if ([segue.identifier isEqualToString:@"WebSegue"]){

        WebViewController *webController = segue.destinationViewController;
        webController.entityLinkToWiki = self.webLink;
        NSLog(@"WebSegue link is %@", self.webLink);


    }
}

NSLog 说,self.webLink 已经是 - Московский_Кремль(不正确的值)。因此,我没有为我的 UIWebView 获得正确的链接。所以现在,我的问题是 - 如何像我一样让正确的链接通过它?我不想费心从最终控制器中的 XML 文件加载它,因为我需要 indexPath.row 的信息来获得正确的值(我在 XML 文件中有很多实体)。

感谢您提供的任何帮助,并对第一篇文章感到抱歉(我没有费心查看控制台并发现我的链接不正确)。

【问题讨论】:

  • 您能否发布 XML 文件(或其中的相关部分)并显示它是如何加载到 NSString 属性中的?我刚刚尝试了将克里姆林宫链接作为NSString 文字(@"http://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D1%81%D0%BA%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B9_%D0%9A%D1%80%D0%B5%D0%BC%D0%BB%D1%8C";)粘贴到代码中的代码,并且效果很好。所以我认为问题与西里尔字符的编码方式有关。

标签: ios objective-c uiwebview


【解决方案1】:

您已提出多个问题。如果您只想在浏览器中打开克里姆林宫链接 - 请使用 NSUTF8StringEncoding

NSString 没有任何内置函数可以真正正确地进行 URL 编码,但这个函数适用于扩展字符。这肯定会处理你的外国角色。我测试了以下 -

- (void) viewDidLoad{

    [super viewDidLoad];

    self.myWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    self.myWebView.delegate = self;

    NSString *myString = @"http://ru.wikipedia.org/wiki/Московский_Кремль";
    NSURL *urlik = [NSURL URLWithString:[myString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];

    NSURLRequest *requestObj = [NSURLRequest requestWithURL:urlik];
    [self.myWebView loadRequest:requestObj];
    [self.view addSubview:self.myWebView];

}

【讨论】:

  • 感谢您的回答,但我发现,在加载之前我得到了不正确的链接,这是我的错
  • @EvgeniyKleban 请选择正确的答案以考虑对其他提出相同问题的用户关闭该主题。
  • 请查看更新后的问题。问题没有解决。我无法使用 segues 传递正确的字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
相关资源
最近更新 更多