我的工作使用一个JSQMessagesViewController消息传递应用程序,我想给另一个变量,一个整数相关联score,其中每个消息(具有默认值,例如沿senderID,text和displayName)。这就是我尝试实现的方法:
score
senderID
text
displayName
func addMessage(id: String, text: String, displayName: String, score: Int) { // Make sure the character count is between 10 and 140, then add message to message list to display if (text.characters.count <= 10 || text.characters.count >= 140) { } else { let message = JSQMessage(senderId: id, displayName: displayName, text: text, score: score) messages.append(message) } }
但是我收到以下错误消息:
Argument labels '(senderId:, displayName:, text:, score:)' do not match any available overloads
我只能假设这是因为有一些关于JSQMessage对象可以保存哪些数据的预设定义,我不确定如何覆盖它,以便可以将其他变量与消息关联。
注意:我试图直接更改JSQMessagesViewController框架本身中的代码(在JSQMessage.h和JSQMessage.m文件中)以添加一个额外的变量,但这只会导致更多错误,而且恐怕会搞砸了。
JSQMessage.h
JSQMessage.m
有什么办法吗?
提前致谢。
编辑
我想我想出了办法!
import UIKit import JSQMessagesViewController class CustomMessage: JSQMessage { var score : Int init(senderId:String, displayName:String, text:String, score:Int) { self.score = score super.init(senderId:senderId, displayName:displayName, text:text) } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } }
但是我现在super.init这样后得到一个错误:must call a designated initializer of the superclass 'JSQMessage'
super.init
must call a designated initializer of the superclass 'JSQMessage'
只需对JSQMessage对象进行子类化,然后将额外的变量添加到子类化对象中即可。然后它将符合并具有所有相同的方法。
编辑:
看来我可能怀念您,文档指示您遵守JSQMessageData协议。我是这样做的
JSQMessageData
class Message: NSObject, JSQMessageData { var text_: String? var senderId_: String? var date_: NSDate? var senderDisplayName_: String? var isMediaMessage: Bool? var score: Int? ***** Here is your new Variable init(text: String?, senderId: String?, senderDisplayName: String?, score: Int?, date: NSDate) { self.text_ = text self.senderId_ = senderId self.isOutBound_ = isOutBound self.date_ = date self.senderDisplayName_ = senderDisplayName self.score_ = score ***** } func text() -> String? { return text_ } func score() -> Int? { ***** return score_ } func senderId() -> String? { return senderId_ } func date() -> NSDate? { return date_ } func senderDisplayName() -> String? { return senderDisplayName_ } func isMediaMessage() -> Bool { return isMediaMessage_ } func messageHash() -> UInt { return UInt(self.hash) }
}
您仍然可以用其他方式做到这一点,但是协议是可行的方式。
让我知道是否对您有所帮助:)但我会尽力澄清一下。祝好运