2016-12-14 51 views
0

由于某种原因,我收到崩溃,我不知道为什么。一切正在从FIRBase正确拉出。但是,试图加载用户URL时,我得到一个崩溃JSQMessageAvatarImageFactory错误

印刷(快照)

["MediaType": TEXT, "text": Test Message, "senderId": KG7b3tDTaoMwcAQAi2JI8vjj0OB2, "senderName": user1] 
Optional({ 
email = "[email protected]"; 
id = KG7b3tDTaoMwcAQAi2JI8vjj0OB2; 
profileImage = "gs://big-pen.appspot.com/profileImage/KG7b3tDTaoMwcAQAi2JI8vjj0OB2"; 
username = user1;}) 

我的错误

fatal error: unexpectedly found nil while unwrapping an Optional value 
(lldb) 

这里是我的代码。

func observeUsers(id: String){ 
     FIRDatabase.database().reference().child("people").child(id).observeEventType(.Value, withBlock: { snapshot in 
     print(snapshot.value) 
     if let dict = snapshot.value as? [String: AnyObject] { 
      let avatarUrl = dict["profileImage"] as! String 

      //call the setupAvatar function 
      self.avatar(avatarUrl, messageId: id) 

     } 
    }) 
} 


func avatar(url: String, messageId: String){ 

    if DataService.dataService.currentUser != nil{ 
     if url != "" { 
     let fileURL = NSURL(string: url) 
     let data = NSData(contentsOfURL: fileURL!) 
     let image = UIImage(data:data!) //<-----I am getting an error at this line error code: "Thread1:EXC_BAD_INSTRUCTION(code=Exc_I386_INVOP, subcode=0x0)" 
     let userImg = JSQMessagesAvatarImageFactory.avatarImageWithImage(image, diameter: 30) 
      avatarDict[messageId] = userImg 
     }else{  
     JSQMessagesAvatarImageFactory.avatarImageWithImage(UIImage(named: "cam_w.png"), diameter: 30) 
    } 
    collectionView.reloadData() 
    } 
} 

override func collectionView(collectionView: JSQMessagesCollectionView!, avatarImageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageAvatarImageDataSource! { 
    let message = messages[indexPath.item] 

    return avatarDict[message.senderId] 
    //return JSQMessagesAvatarImageFactory.avatarImageWithImage(UIImage(named: "cam_w.png"), diameter: 30) 
} 

谢谢。我已经坚持了两天了。

回答

0

也许这不是一个有效的网址,以便检查它改变你的头像FUNC按键:

func avatar(url: String, messageId: String){ 

    if DataService.dataService.currentUser != nil{ 
     if let fileURL = NSURL(string: url), 
       data = NSData(contentsOfURL: fileURL) { 

     let image = UIImage(data:data!) //<-----I am getting an error at this line error code: "Thread1:EXC_BAD_INSTRUCTION(code=Exc_I386_INVOP, subcode=0x0)" 
     let userImg = JSQMessagesAvatarImageFactory.avatarImageWithImage(image, diameter: 30) 
      avatarDict[messageId] = userImg 
     }else{  
     JSQMessagesAvatarImageFactory.avatarImageWithImage(UIImage(named: "cam_w.png"), diameter: 30) 
    } 
    collectionView.reloadData() 
    } 
} 
+0

哇哦我明白了。我拉一个“gs://”作为URL,但这是不正确的。我如何修改现有的代码以将“gs://”变成“http://”?这可能吗?对不起,我是Firebase新手。 – Ketone

+0

你必须迭代你的字符串,并找到“gs://”并替换为:“http://”查看此链接http://stackoverflow.com/questions/30767594/iterate-through-a-string-swift -2-0 –

+1

你是个天才!两天的工作,你会在10分钟内找到答案。得到它的工作!谢谢。 – Ketone