【发布时间】: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