当我尝试快速加载我的表格视图时,为啥会出现 EXC_BAD_INSTRUCTION 错误?
Posted
技术标签:
【中文标题】当我尝试快速加载我的表格视图时,为啥会出现 EXC_BAD_INSTRUCTION 错误?【英文标题】:Why am I getting EXC_BAD_INSTRUCTION error when I am trying to load my tableview in swift?当我尝试快速加载我的表格视图时,为什么会出现 EXC_BAD_INSTRUCTION 错误? 【发布时间】:2014-07-03 16:46:05 【问题描述】:在将一些值保存到我的 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
【问题讨论】:
【参考方案1】:问题
您之前可能忘记为单元标识符注册一个类。查看dequeueReusableCellWithIdentifier:
的文档:
讨论
在将任何单元格出列之前,调用此方法或
registerNib:forCellReuseIdentifier:
方法来告诉表格视图如何创建新单元格。如果指定类型的单元格当前不在重用队列中,表格视图将使用提供的信息自动创建新的单元格对象。
然后该方法返回 nil 并且 Swift 无法隐式解包可选。
解决方案
在代码中
要解决这个问题,您可以像这样在viewDidLoad
中调用registerClass:forCellReuseIdentifier:
(见docs)...
override func viewDidLoad()
super.viewDidLoad()
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
在界面生成器中
...或者,如果您使用 Storyboard,则在选择 UITableViewCell 原型时直接在属性检查器的 Interface Builder 中进行设置:
【讨论】:
以上是关于当我尝试快速加载我的表格视图时,为啥会出现 EXC_BAD_INSTRUCTION 错误?的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试显示模态视图时,为啥会出现 CoreAnimation 异常?