2016-12-14 10 views
0

Pour une raison quelconque, je vais avoir un accident et je ne sais pas pourquoi. Tout est retiré de FIRBase correctement. Mais en essayant de charger l'URL utilisateur je reçois un accidentJSQMessageAvatarImageFactory erreur

imprimé (instantané)

["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;}) 

Mon erreur

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

Voici mon code.

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) 
} 

Merci. Je suis coincé là-dessus depuis deux jours maintenant.

Répondre

0

Peut-être que ce n'est pas une URL valide ainsi vérifier changer votre avatar 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

Oh wow je vois. Je tire un "gs: //" comme URL, mais ce n'est pas correct. Comment puis-je modifier mon code existant pour faire "gs: //" dans un "http: //"? Est-ce possible? Désolé, je suis nouveau avec Firebase. – Ketone

+0

Vous devez itérer votre chaîne et trouver "gs: //" et remplacer par: "http: //" consultez ce lien http://stackoverflow.com/questions/30767594/fr/activer-une-chaîne-un-signe -2-0 –

+1

Vous êtes un génie !!!! Deux jours de travail à ce sujet et vous l'avez compris en 10 minutes. Je l'ai eu au travail !!!! Merci. – Ketone