将tabelview indexPath.row作为String传递给VC WebView

时间:2015-06-04 07:47:02

标签: objective-c swift tableview

我有一个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"

但是,如果下面从URL拉出indexPath.row,则由于某种原因失败并传递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(),我得到与URL完全相同的输出我在测试let newsLink常量

中硬编码
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 types

var posts = NSMutableArray()
var elements = NSMutableDictionary()

我如何添加对象

elements.setObject(urlLink, forKey: "link")
posts.addObject(elements)

3 个答案:

答案 0 :(得分:0)

你能否展示"帖子"的声明/结构?变量?

如果没有更多信息,我唯一能想到的就是" link"实际上并不是一个字符串,而是印刷时显示内容的东西(可能是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

答案 1 :(得分:0)

我认为RewriteEngine On RewriteRule ^1\.html$ /folder/1 [R=301,L,NC] RewriteRule ^2\.html$ /2 [R=301,L,NC] RewriteRule ^3\.html$ /3 [R=301,L,NC] RewriteRule ^3/?$ /vw-vans/another-folder/2 [R=301,L,NC] # catchall rule for .html files RewriteRule ^.+?\.html$ /folder? [R=301,L,NC] 不会返回(posts.objectAtIndex(indexPath.row).valueForKey("link")类型。它可能已经是NSURL,因此在String

中显示正确的值

你能否发布更多有关它的细节。希望这有帮助。

答案 2 :(得分:0)

事实证明,这是NSURL不喜欢的网址编码。

解决方案是使用以下内容:

var escapedString = originalString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)

我是swift的新手,但这看起来有点乱。