我在将一些值保存到我的coredata数据库后尝试填充我的tableview。我要求它显示我的代码中指示的一些值,但无论我做什么,我都会收到上述错误。 有什么建议?我已尝试过其他一些有这个问题的帖子,但似乎没什么用。
我无法想象我在哪里发出一个零输出Swift并不期望。
override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell? {
let CellId: NSString = "Cell"
var cell: UITableViewCell = tableView?.dequeueReusableCellWithIdentifier(CellId) as UITableViewCell
if let ip = indexPath {
var data: NSManagedObject = myCustomers[ip.row] as NSManagedObject
var addno = data.valueForKeyPath("custaddno") as String
var addname = data.valueForKeyPath("custaddfirstline") as String
cell.textLabel.text = "\(addno) \(addname)"
var jcost = data.valueForKeyPath("custjobcost") as Float
var jfq = data.valueForKeyPath("custjobfq") as Float
var jfqtype = data.valueForKeyPath("custjobfqtype") as String
cell.detailTextLabel.text = "Charge: \(jcost) to be done every \(jfq) \(jfqtype)"
}
return cell
}
答案 0 :(得分:2)
您可能忘记在之前为小区标识符注册一个类。请参阅dequeueReusableCellWithIdentifier:
的文档:
<强>讨论强>
在排队任何单元格之前,请调用此方法或
registerNib:forCellReuseIdentifier:
方法告诉表格视图如何创建新单元格。如果指定类型的单元当前不在重用队列中,则表视图使用提供的信息自动创建新的单元对象。
该方法返回nil然后Swift无法隐式解包可选。
要解决此问题,您可以像registerClass:forCellReuseIdentifier:
这样呼叫viewDidLoad
(请参阅docs)......
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
}
Interface Builder中的...或者,如果您正在使用Storyboard,则在选择UITableViewCell原型时,在属性检查器中直接在Interface Builder中进行设置: