2016-09-12 2 views
0

Я нашел эту ошибку без каких-либо инструкций о том, какая часть была неправильной при отображении моего таблицы.EXC_BREAKPOINT (код = EXC_i386_BPT, subcode = 0x0) (lldb)

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

Спасибо заранее.

ответ

1

Небольшие изменения, которые я сделал в вашем коде, позволяют ему работать, и я сменил пару (imageUrl) на (imageUrl as! String), чтобы сохранить компилятор счастливым.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    // Dequeue cell 
    let cell: UITableViewCell! = self.clientTable.dequeueReusableCellWithIdentifier("ClientCell", forIndexPath: indexPath) 
    // Unpack message from Firebase DataSnapshot 

    // changed vvv 
    //print statements are there just to check the data... 
    let messageSnapshot: FIRDataSnapshot! = self.messages[indexPath.row] 
    //print(messageSnapshot) 
    let message = messageSnapshot.value as! NSDictionary 
    //print(message) 
    let date = message.objectForKey("date") as! String 
    //print(date) 
    // changed ^^^ 

    //old code 
    //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 as! String).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 as! String), 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! <- doesn't work 

     // changed vvv 
     let aNum = message.objectForKey("weight") as! NSNumber 
     let text = aNum.stringValue 
     // changed ^^^ 

     cell!.textLabel?.text = date + ": " + text 
     cell!.imageView?.image = UIImage(named: "ic_account_circle") 
     if let photoUrl = message[Constants.MessageFields.photoUrl], url = NSURL(string:photoUrl as! String), data = NSData(contentsOfURL: url) { 
     cell!.imageView?.image = UIImage(data: data) 
     } 
    } 
    return cell! 
    } 
+0

А это сработало! Спасибо !! Я супер новичок в связанных с Firebase функциях, поэтому понятия не имел, как с ними бороться. Я обязательно изучу гораздо больше основы для вашего кода. Еще раз спасибо! – Kei

1

Я думаю, что проблема здесь заключается в том, что вы пытаетесь отбрасывать messageSnapshot.value в словарь, и это терпит неудачу.

Я предлагаю вам изменить строку:

let message = messageSnapshot.value as! Dictionary<String, String> 

в

if let message = messageSnapshot.value as? NSDictionary{ 
} 

или

if let message = messageSnapshot.value as? [NSObject: AnyObject]{ 
} 

и исправить компиляции предупреждение, вызванное изменением.

И вы еще найдете аварии ... есть некоторые другие ошибки в коде ...

Более того, вы должны использовать «если позволить», «охранник пусть», опционально сцеплением вместо использования " как! "," как Строка! ".

Данные инструкции рекомендованы Apple. Это безопаснее. Это может помочь вам быстрее найти ваши ошибки. И это вызывает меньше сбоев.

+0

Вы правы! Я только вносил изменения в прежние коды, поэтому были неосторожные ошибки ... Спасибо за совет! – Kei

Смежные вопросы