在将一些值保存到coredata数据库后,我正在尝试填充tableview。我要求它显示我的代码中指示的一些值,但无论我做什么,我都会得到上面的错误。有什么建议吗?我试过其他一些有这个问题的帖子,但似乎都不起作用。
我想不出我可能在哪里给出了Swift不期望的nil输出。
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
}
2条答案
按热度按时间e4eetjau1#
问题
您以前可能忘记为单元标识符注册一个类。参见
dequeueReusableCellWithIdentifier:
的文档:讨论
在出队任何单元格之前,调用此方法或
registerNib:forCellReuseIdentifier:
方法来告诉表视图如何创建新单元格。如果指定类型的单元格当前不在重用队列中,则表视图将使用提供的信息自动创建新的单元格对象。该方法返回nil then,Swift无法隐式解包可选值。
解决方案
代码中
要解决这个问题,您可以像这样在
viewDidLoad
中调用registerClass:forCellReuseIdentifier:
(参见文档)...在界面生成器中
...或者,如果您使用的是情节串联图板,请在选中UITableViewCell原型时,在属性检查器的“界面生成器”中直接进行设置:
sxpgvts32#
这里有一个清单,以避免这种崩溃:
1.验证单元格是否已注册到表视图
1.验证您的XIB单元格是否标有正确的标识符
1.验证您的xib是否链接到权限IBOutlets
1.验证IBOutlets的类型是否正确(即UIView、UIImage、UIStackView等)