目标C语言 传递表视图indexPath.行作为字符串到VC WebView



我有一个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的新手,但是这看起来有点乱。

最新更新