在解包一个Optional值时,意外发现nil意外错误(可选绑定)

时间:2015-08-21 01:53:12

标签: xcode swift parse-platform optional

我列出了我的错误所在。在我的应用程序上,我试图从Parse检索数据并将其显示在具有多个对象的自定义PFTableViewCell中。每次," null"返回所有标签的值,这就是我的标签......我总是在标记的行上出错:"致命错误:在展开可选值(lldb)&#时意外发现nil 34;

import UIKit
import CoreLocation
import ParseUI
import Parse

class TableViewController: PFQueryTableViewController, CLLocationManagerDelegate {



    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject!) -> PFTableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as?TableViewCell
        cell?.gabText.text = object?.valueForKey("text") as? String ------> error
        cell?.gabText.numberOfLines = 0
        let score = object?.valueForKey("vote") as? Int
        cell?.voteCount.text = "\(score)"
        cell?.time.text = "\((indexPath.row + 1) * 3)m ago"
        let replycnt = object?.objectForKey("replies") as? Int
        cell?.gabReplies.text = "\(replycnt) replies"
        return cell!
    }



       }

2 个答案:

答案 0 :(得分:0)

我不能告诉你为什么你只为你的对象获得nil,但是当你发生这种情况时你可以重构它:

    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as? TableViewCell
    if let object = object {
        cell?.gabText.text = object.valueForKey("text") as? String
        cell?.gabText.numberOfLines = 0
        let score = object.valueForKey("vote") as? Int
        cell?.voteCount.text = "\(score)"
        cell?.time.text = "\((indexPath.row + 1) * 3)m ago"
        let replycnt = object.objectForKey("replies") as? Int
        cell?.gabReplies.text = "\(replycnt) replies"
    }
    return cell!

答案 1 :(得分:0)

我不知道你是如何得到你的对象的,但是你可以确保一个密钥存在,然后才能获得它的价值,例如:

cell?.gabText.text = object?.valueForKey("text") as? String

可以在if语句中包含这样的内容:

if object?.objectForKey("text") != nil {

}

这样,您可以在尝试从中获取值之前确保文本键存在。