NSUrl exc_bad_instruction?

时间:2015-05-05 04:19:48

标签: swift

我正在尝试按照本教程进行一些小的试验和错误运行后,我遇到了一个我不太了解的问题。我收到此错误(?)exc_bad_instruction。我已经读过,通常当你试图打开一个零或者零无效时会发生这种情况?

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell? {

    var cell:iGameTableViewCell? = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as? iGameTableViewCell
    if(cell == nil) {
        cell = NSBundle.mainBundle().loadNibNamed("iGameTableViewCell", owner: self, options: nil)[0] as? iGameTableViewCell
    }

    if let pfObject = object {
        cell?.gameNameLabel?.text = pfObject["name"] as? String

        var votes:Int? = pfObject["votes"] as? Int
        if votes == nil {
            votes = 0
        }
        cell?.gameVotesLabel?.text = "\(votes!) votes"

        var credit:String? = pfObject["author"] as? String
        if credit != nil {
            cell?.gameCreditLabel?.text = "\(credit!)"
        }

        cell?.gameImageView?.image = nil
        if var urlString:String? = pfObject["url"] as? String {
            var url:NSURL? = NSURL(string: urlString!)
            if var url:NSURL? = NSURL(string: urlString!) {
                var error:NSError?
                var request:NSURLRequest = NSURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReturnCacheDataElseLoad, timeoutInterval: 5.0)

                NSOperationQueue.mainQueue().cancelAllOperations()

                NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {
                    (response:NSURLResponse!, imageData:NSData!, error:NSError!) -> Void in

                    cell?.gameImageView?.image = UIImage(data: imageData)

                })
            }
        }
    }

    return cell
}

1 个答案:

答案 0 :(得分:2)

请参阅以下两行:

 var url:NSURL? = NSURL(string: urlString!)
 if var url:NSURL? = NSURL(string: urlString!) {
  • 首先,你不能要求他们俩;他们都做同样的事情 不同的方式。

  • 其次,第一个行的运行方式很危险。删除它。

  • 第三步,从urlString!和类型中删除感叹号 声明NSURL?

现在你将拥有这个:

 if var url = NSURL(string: urlString) {

这是安全的,是这种展开的样子。

编辑:只是为了澄清:这是一个非常弄巧成拙的事情:

if var urlString:String? = pfObject["url"] as? String

这就是原因。 if var ... =if let ... =构造解包等号右侧的Optional。这就是它的目的:安全地展开Optional。但是通过添加:String?声明,你可以在Optional中重新包装它,从而击败了这个结构的整个目的!你想这样说:

if var urlString = pfObject["url"] as? String

现在urlString,如果它是任何东西,是一个 unwrapped 字符串,这就是你所追求的。