我在显示我的 tableView 时发现了这个错误,但没有任何说明是哪一部分出错了。
这是可能是问题来源的 tableViewCell 部分:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// Dequeue cell
let cell: UITableViewCell! = self.clientTable.dequeueReusableCellWithIdentifier("ClientCell", forIndexPath: indexPath)
// Unpack message from Firebase DataSnapshot
let messageSnapshot: FIRDataSnapshot! = self.messages[indexPath.row]
let message = messageSnapshot.value as! Dictionary<String, String>
let date = message[Constants.MessageFields.date] as String!
if let imageUrl = message[Constants.MessageFields.imageUrl] {
if imageUrl.hasPrefix("gs://") {
FIRStorage.storage().referenceForURL(imageUrl).dataWithMaxSize(INT64_MAX){ (data, error) in
if let error = error {
print("Error downloading: \(error)")
return
}
cell.imageView?.image = UIImage.init(data: data!)
}
} else if let url = NSURL(string:imageUrl), data = NSData(contentsOfURL: url) {
cell.imageView?.image = UIImage.init(data: data)
}
cell!.textLabel?.text = "sent by: \(date)"
} else {
let text = message[Constants.MessageFields.weight] as String!
cell!.textLabel?.text = date + ": " + text
cell!.imageView?.image = UIImage(named: "ic_account_circle")
if let photoUrl = message[Constants.MessageFields.photoUrl], url = NSURL(string:photoUrl), data = NSData(contentsOfURL: url) {
cell!.imageView?.image = UIImage(data: data)
}
}
return cell!
整个项目基于 Firebase 教程,我只是为了测试做了一些更改。
这是项目: Github Link
提前致谢。
最佳答案
我认为这里的问题是您尝试将 messageSnapshot.value 转换为 Dictionary,但失败了。
我建议你换行:
let message = messageSnapshot.value as! Dictionary<String, String>
到
if let message = messageSnapshot.value as? NSDictionary{
}
或
if let message = messageSnapshot.value as? [NSObject: AnyObject]{
}
并修复由更改引起的编译警告。
而且您仍然会发现崩溃...您的代码中还有一些其他错误...
此外,您应该使用“if let”、“guard let”、可选链接,而不是使用“as!”、“as String!”。
这些声明是 Apple 推荐的。它更安全。它可以帮助您更快地找到错误。而且它会减少崩溃。
关于ios - EXC_BREAKPOINT(代码=EXC_i386_BPT,子代码=0x0)(lldb),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39448801/