首页 文章

参数标签与任何可用的重载都不匹配

提问于
浏览
0

我正在使用JSQMessagesViewController处理消息传递应用程序,我想将另一个变量Integer score 与每条消息(以及 senderIDtextdisplayName 等默认值)相关联 . 这就是我尝试实现这个的方法:

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.hJSQMessage.m 文件中)以添加一个额外的变量,但这只会导致更多错误,我担心我会搞砸一些东西 .

有解决方案?

提前致谢 .

EDIT

我想我想出了怎么做! `import UIKit导入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'

1 回答

  • 6

    只需将JSQMessage对象子类化,并将额外的变量添加到子类对象中 . 然后它将符合并具有所有相同的方法 .

    编辑:

    看起来我可能会错过带领你,文档指示你遵守 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)
    }
    

    }

    您仍然可以通过其他方式执行此操作,但协议是可行的方法 .

    让我知道,如果这有助于我可能只是让你更困惑:)但我会尽力澄清 . 祝好运

相关问题