http://www.atmarkit.co.jp/ait/articles/1606/06/news020_3.html
上記のサイト様を参考にシステムを開発したのですが、実行した際にチャットの順番がぐちゃぐちゃになってしまいます。
原因を探ってみたのですが、全くわかりません、どうかご助力の方お願い致します。
swift
1import UIKit 2import JSQMessagesViewController 3import Firebase 4import FirebaseDatabase 5 6class ViewController: JSQMessagesViewController { 7 var messages: [JSQMessage] = [] 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 senderDisplayName = "tst" 12 senderId = "tst" 13 let ref = FIRDatabase.database().reference() 14 ref.observe(.value, with: { snapshot in 15 guard let dic = snapshot.value as? Dictionary<String, AnyObject> 16 else{ 17 return 18 } 19 guard let posts = dic["messages"] as? Dictionary<String, 20 Dictionary<String,String>> else{ 21 return 22 } 23 self.messages = posts.values.map { dic in 24 let senderId = dic["senderId"] ?? "" 25 let text = dic["text"] ?? "" 26 let displayName = dic["displayName"] ?? "" 27 return JSQMessage(senderId: senderId, displayName: 28 displayName, text: text) 29 } 30 self.collectionView.reloadData() 31 }) 32 33 } 34 35 override func collectionView(_ collectionView: JSQMessagesCollectionView!, messageDataForItemAt indexPath: IndexPath!) -> JSQMessageData! { 36 return messages[indexPath.row] 37 } 38 39 override func collectionView(_ collectionView: JSQMessagesCollectionView!, messageBubbleImageDataForItemAt indexPath: IndexPath!) -> JSQMessageBubbleImageDataSource! { 40 if messages[indexPath.row].senderId == senderId { 41 return JSQMessagesBubbleImageFactory().outgoingMessagesBubbleImage( 42 with: UIColor(red: 112/255, green: 192/255, blue: 75/255, alpha: 1)) 43 } else { 44 return JSQMessagesBubbleImageFactory().incomingMessagesBubbleImage( 45 with: UIColor(red: 229/255, green: 229/255, blue: 229/255, alpha: 1)) 46 } 47 } 48 49 override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 50 51 let cell = super.collectionView(collectionView, cellForItemAt: indexPath) as? JSQMessagesCollectionViewCell 52 if messages[(indexPath as NSIndexPath).row].senderId == senderId { 53 cell?.textView?.textColor = UIColor.white 54 } else { 55 cell?.textView?.textColor = UIColor.darkGray 56 } 57 return cell! 58 } 59 60 override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 61 return messages.count 62 } 63 64 override func collectionView(_ collectionView: JSQMessagesCollectionView!, avatarImageDataForItemAt indexPath: IndexPath!) -> JSQMessageAvatarImageDataSource! { 65 66 return JSQMessagesAvatarImageFactory.avatarImage( 67 withUserInitials: messages[indexPath.row].senderDisplayName, 68 backgroundColor: UIColor.lightGray, textColor: UIColor.white, 69 font: UIFont.systemFont(ofSize: 10), diameter: 30) 70 } 71 override func didPressSend(_ button: UIButton!, withMessageText text: String!, senderId: String!, senderDisplayName: String!, date: Date!) { 72 print("beforeA",text, senderId, senderDisplayName, date) 73 inputToolbar.contentView.textView.text = "" 74 print("A") 75 let ref = FIRDatabase.database().reference() 76 print("B") 77 ref.child("messages").childByAutoId().setValue( 78 ["senderId": senderId, "text": text, "displayName": senderDisplayName]as [AnyHashable:Any]) 79 //print文を挟み、どこまでコードが動いているかをコンソールの方へ出力。 80 //as [AnyHashable:Any]を最後に追加 2016/11/02 1:03 81 print("C") 82 } 83}
(追記)参考画像とデーダベースを貼っておきます
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。