在展开Optional值时意外发现nil(与从XML Feed中提取的URL相关)

时间:2015-02-08 22:07:08

标签: swift webview

我想这是一个非常常见的错误,但是由不同的原因引起。这就是为什么我非常感谢你对我的帮助。

我正在尝试将XML源中的URL发送到包含webview的viewcontroller。

这是tableview控制器中的segue代码,其中包含文章标题:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "openPage" {

        var indexPath: NSIndexPath = self.tableView.indexPathForSelectedRow()!
        let wvc: WebViewController = segue.destinationViewController as WebViewController
        var selectedURL: String = feeds[indexPath.row].objectForKey("link") as String
        selectedURL = selectedURL.stringByReplacingOccurrencesOfString(" ", withString: "")
        selectedURL = selectedURL.stringByReplacingOccurrencesOfString("\n", withString: "")
        wvc.selectedLink = selectedURL
        println(selectedURL)
    }
}

openPage将我的tableview连接到webview viewcontroller。我打印selectedURL,它完美地工作。以下是ViewController的代码,包括webview:

var selectedLink = ""

@IBOutlet var myWebView: UIWebView!

override func viewDidLoad() {
    super.viewDidLoad()
    myWebView.loadRequest(NSURLRequest(URL: NSURL(string: selectedLink)!))
}

这会返回错误。我没有看到任何问题,我使用的教程具有确切的代码,运行正常,没有任何问题。 URL结构也非常好,因为我直接在webview中尝试了selectedURL的打印版本,它工作正常。我想问题是segue连接但是无法弄明白。

提前致谢!

1 个答案:

答案 0 :(得分:0)

您应该检查NSURL是否真的是有效的URL。 Chrome或Safari等浏览器会接受许多无效的网址。

因此,如果您的网址有效,请检查您的网址。否则它将返回nil,您必须检查您的网址:

let unwrappedUrl: NSURL? = NSURL(string: selectedLink!)

如果返回nil,您也可以尝试转义字符串:

selectedLink = selectedLink.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!