参数标签不匹配任何可用的重载
Argument labels do not match any available overloads
我正在使用 JSQMessagesViewController 开发一个消息传递应用程序,我想将另一个变量,一个整数 score
,与每条消息相关联(以及 senderID
、[=14 等默认值=],和 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'
只需对 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)
}
}
你仍然可以用另一种方式来做,但协议是必经之路。
如果这对您有帮助,请告诉我,我可能只是让您更加困惑 :) 但我会尽力澄清。祝你好运
我正在使用 JSQMessagesViewController 开发一个消息传递应用程序,我想将另一个变量,一个整数 score
,与每条消息相关联(以及 senderID
、[=14 等默认值=],和 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'
只需对 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)
}
}
你仍然可以用另一种方式来做,但协议是必经之路。
如果这对您有帮助,请告诉我,我可能只是让您更加困惑 :) 但我会尽力澄清。祝你好运