【问题标题】:Swift 2.2, Firebase, JSQMessagesViewController - Cannot convert return expression of type [JSQMessage] to type JSQMessageDataSwift 2.2、Firebase、JSQMessagesViewController - 无法将 [JSQMessage] 类型的返回表达式转换为 JSQMessageData 类型
【发布时间】:2016-08-22 13:08:58
【问题描述】:

我正在尝试制作一个聊天应用程序。我已经完成了登录和部分聊天界面,但是当我尝试使用函数 collectionView(collectionView: JSQMessagesCollectionView!, messageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageData 配置聊天时,它给了我错误“无法将 [JSQMessage] 类型的返回表达式转换为 JSQMessageData 类型!”

这是我的 MessagesViewController 代码:

import UIKit
import JSQMessagesViewController
import Firebase



class MessagesViewController: JSQMessagesViewController {




override func collectionView(collectionView: JSQMessagesCollectionView!,
                             messageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageData! {
    return message[indexPath.item].userMessages
}

override func collectionView(collectionView: UICollectionView,
                             numberOfItemsInSection section: Int) -> Int {
    return message.count
}

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.hidesBackButton = false

    // Do any additional setup after loading the view.
}


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}



/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
}
*/

}

这是我的自定义类消息的代码:

import Foundation
import JSQMessagesViewController
import Firebase

class Messages {

dynamic var user = FIRAuth.auth()?.currentUser?.uid

dynamic var addedUsers = [String]()

dynamic var userMessages = [JSQMessage]()

dynamic var messageDates = [NSDate]()

}

数组消息是var message = [Messages]()

我的错误是什么,提前谢谢你。

【问题讨论】:

  • 我认为应该是应该返回消息[indexPath.item]

标签: ios swift firebase firebase-realtime-database jsqmessagesviewcontroller


【解决方案1】:

问题是你试图传递JSQMessages,如果你使用JSQMessages而不是你的自定义类Messages,你可以这样做,但是如果你有更多的变量要跟踪你的消息对象那么您可能需要您的自定义实现。

所有你需要让你的Messages 类符合JSQMessageData 协议。 JSQMessages 已经符合这一点,这就是他们工作的原因。我已经在另一个 stackoverflow 问题中概述了我之前是如何做到这一点的,如果你遇到困难可以参考它作为指南。 Argument labels do not match any available overloads

祝你好运,如果有更多我可以帮助你的事情,请告诉我。 ?

【讨论】:

    【解决方案2】:

    对不起,我自己解决了。我进行了实验,发现我必须输入'messages[indexPath.item].userMessages[index Path.item]'。我意识到我需要为函数提供每条消息而不是数组。感谢所有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多