ios - EXC_BREAKPOINT(代码=EXC_i386_BPT,子代码=0x0)(lldb)

标签 ios swift firebase firebase-realtime-database

我在显示我的 tableView 时发现了这个错误,但没有任何说明是哪一部分出错了。

Screenshot

这是可能是问题来源的 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/

相关文章:

ios - 何时在 Swift 中从 firebase 获取数据(iOS 开发者)

firebase - 检查firebase记录是否存在并返回 bool 值

iphone - 屏幕旋转锁定时如何获取设备方向?

ios - 如何制作自定义水平表格 View ?

ios - 如何使用默认值使闭包可选

javascript - 如何获取 Firebase Cloud Firestore 中存在/不存在特定字段的文档?

ios - iOS:如何在音乐应用程序中的蓝牙耳机中播放缓冲音频?

xcode - 在可设置的下标上进行类型删除会产生奇怪的错误;这是编译器错误还是我做错了什么?

ios - 在 UILabel 中读取\n

ios - 快速从本地 XML 加载图像