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

Unexpectedly found nil while unwrapping an Optional value (related to URL pulled from XML feed)

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

我正在尝试将 URL 从 XML 提要发送到包含网络视图的 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)!))
}

这个returns错误。我没有看到任何问题,我使用的教程具有准确的代码并且可以正常运行,没有任何问题。 URL 结构也非常好,因为我直接在我的 webview 中尝试了 selectedURL 的打印版本,它有效。我想问题出在 segue 连接上,但无法弄清楚。

提前致谢!

您应该检查 NSURL 是否真的有效 URL。 Chrome 或 Safari 等浏览器确实接受许多 URL,但实际上无效。

所以你应该检查你的 URL 是否有效。否则它将 return nil 你必须检查你的 URL:

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

如果这个 return 为 nil 你也可以尝试转义你的字符串:

selectedLink = selectedLink.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!