【问题标题】:Argument labels do not match any available overloads参数标签不匹配任何可用的重载
【发布时间】:2016-12-16 08:06:52
【问题描述】:

我正在使用 JSQMessagesViewController 开发一个消息传递应用程序,我想将另一个变量,一个整数 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 文件中)中的代码以添加一个额外的变量,但这只会导致更多错误,我担心我会搞砸一些事情。

有什么解决办法吗?

提前致谢。

编辑

我想我知道该怎么做了!

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'

【问题讨论】:

  • hii 我还想为消息 ID @Ahad Sheriff 添加另一个参数

标签: swift jsqmessagesviewcontroller


【解决方案1】:

只需子类化 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)
}

}

您仍然可以采用其他方式,但协议是要走的路。

如果这有帮助,请告诉我,我可能会让您更加困惑 :) 但我会尝试澄清。祝你好运

【讨论】:

  • 你能看看我对我的问题所做的编辑吗?我想我几乎明白了,我只是遇到了一个小错误。感谢您的出色帮助!
  • 嘿,看看你是否看到我的编辑,是否有帮助。
  • 我想将 messageID 属性添加到 JSQMessage 中,我将从哪个类更改并在 pod 后安装的目标 c 类中添加 messageID 属性
  • @DanielLeonard 请回复
猜你喜欢
  • 2017-08-12
  • 2018-04-02
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多