我有一个TableViewController,我试图通过URL传递到另一个ViewController上的WebView
我重写了下面的函数,如果我把URL设置为静态,就像你在注释中看到的let newsLink
常量
let newsLink = "http://www.stuff.co.nz/business/industries/69108799/Kirkcaldie-Stains-department-store-to-become-David-Jones"
然而,下面从indexPath.row
中提取URL
时,由于某种原因它失败了,并通过了nil
值
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
let newsLink = (posts.objectAtIndex(indexPath.row).valueForKey("link") as! String)
//let newsLink = "http://www.stuff.co.nz/business/industries/69108799/Kirkcaldie-Stains-department-store-to-become-David-Jones"
println(newsLink)
let newsWebViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("idNewsWebViewController") as! NewsWebViewController
newsWebViewController.newsURL = NSURL(string: newsLink)
showDetailViewController(newsWebViewController, sender: self)
}
如果我在下面println(),我得到的输出与我在测试let newsLink
常量
URL
完全相同println(posts.objectAtIndex(indexPath.row).valueForKey("link") as! String)
我不明白为什么这个会失败。希望有比我聪明的人能帮忙。
接收端VC上的代码在
下面var newsURL : NSURL!
//var newsURL = NSURL(string: "http://www.google.co.nz")
@IBOutlet weak var newsWebView: UIWebView!
@IBOutlet weak var descTextView: UITextView!
和viewDidAppear函数
let request : NSURLRequest = NSURLRequest(URL: newsURL!)
newsWebView.loadRequest(请求)
更多信息
var类型
var posts = NSMutableArray()
var elements = NSMutableDictionary()
如何添加对象
elements.setObject(urlLink, forKey: "link")
posts.addObject(elements)
你能展示"posts"变量的声明/结构吗?
没有更多的信息,我唯一能想到的是,"链接"的值实际上不是一个字符串,而是一些东西(也许是一个NSURL),打印时显示的内容。这就解释了为什么println显示了相同的url,但强制转换失败。
当打印或隐式地将任何对象转换为String(如println中)时,它将调用该对象的"description"方法。
例如:class MyURLContainer {
var link:String
override func description() -> String {
return link
}
}
let url = MyURLContainer()
let url.link = "http://www.example.com"
println( "my link: (url)" ) // this would show the link correctly
let link = url as? String // this will be nil, as url can't be casted to String
我认为(posts.objectAtIndex(indexPath.row).valueForKey("link")
不返回String
类型。它可能已经是一个NSURL,因此在println()
你能发表更多关于它的细节吗?
原来NSURL不喜欢的是URL上的编码。
解决方案是使用下面的命令:
var escapedString = originalString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
我是swift的新手,但是这看起来有点乱。