Метки аргументов не соответствуют никаким доступным перегрузкам

Я работаю над приложением обмена сообщениями, используя 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 {переменная оценка: 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'

 Dilip Tiwari04 авг. 2018 г., 07:06
hii я также хочу добавить еще один параметр для идентификатора сообщения @Ahad Sheriff

Ответы на вопрос(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)
}

}

Вы все еще можете сделать это по-другому, но протоколы - это путь.

Дайте мне знать, если это помогло, возможно, я просто запутал вас больше :) Но я постараюсь уточнить. Удачи

 Daniel Leonard13 авг. 2016 г., 17:48
Эй, просто проверяю, видел ли ты мое редактирование и помогло ли это.
 Dilip Tiwari08 авг. 2018 г., 07:25
@DanielLeonard пожалуйста ответ
 Ahad Sheriff13 авг. 2016 г., 19:56
Спасибо за редактирование
 Dilip Tiwari04 авг. 2018 г., 07:27
я хочу добавить свойство messageID в JSQMessage, из какого класса я бы изменил, и добавить свойство messageID в целевой класс c, установленный после pod
 Ahad Sheriff11 авг. 2016 г., 19:10
Не могли бы вы проверить изменения, которые я внес в мой вопрос? Я думаю, что я почти понял, я просто получаю крошечную ошибку. Спасибо за потрясающую помощь, кстати, ты великолепен!

Ваш ответ на вопрос