gpt4 book ai didi

ios - NSInvalidArgumentException 与使用 JSQMessagesViewController

转载 作者:行者123 更新时间:2023-11-29 01:05:53 24 4
gpt4 key购买 nike

我是 swift 的新手 :D,正在使用 JSQMessagesViewController 开发一个简单的聊天应用程序。我阅读并遵循了 JSQMessagesViewController 示例项目 ( https://www.syncano.io/blog/create-ios-chat-app-part1/ ),但我的代码出现错误。

class ChatRoomViewController: JSQMessagesViewController {

let incomingBubble = JSQMessagesBubbleImageFactory().incomingMessagesBubbleImageWithColor(UIColor(red: 10/255, green: 180/255, blue: 230/255, alpha: 1.0))
let outgoingBubble = JSQMessagesBubbleImageFactory().outgoingMessagesBubbleImageWithColor(UIColor.lightGrayColor())
var messages = [JSQMessage]()

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.setup()
self.addDemoMessages()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

func reloadMessagesView() {
self.collectionView?.reloadData()
}

func gotoReserve() {

let nextViewController = ReserveViewController(nibName: "ReserveViewController", bundle: nil)

self.navigationController!.pushViewController(nextViewController, animated: true)
}
}

//MARK - Setup
extension ChatRoomViewController {
func addDemoMessages() {
let message = JSQMessage(senderId: "zzz", displayName: "aaa", text: "asasd")
self.messages.append(message)

self.reloadMessagesView()
}

func setup() {
self.senderId = "user"
self.senderDisplayName = "user"
}
}
//MARK - Data Source
extension ChatRoomViewController {

override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.messages.count
}

override func collectionView(collectionView: JSQMessagesCollectionView!, messageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageData! {
let data = self.messages[indexPath.row]
return data
}

override func collectionView(collectionView: JSQMessagesCollectionView!, didDeleteMessageAtIndexPath indexPath: NSIndexPath!) {
self.messages.removeAtIndex(indexPath.row)
}

override func collectionView(collectionView: JSQMessagesCollectionView!, messageBubbleImageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageBubbleImageDataSource! {
let data = messages[indexPath.row]
switch(data.senderId) {
case self.senderId:
return self.outgoingBubble
default:
return self.incomingBubble
}
}

override func collectionView(collectionView: JSQMessagesCollectionView!, avatarImageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageAvatarImageDataSource! {
return nil
}
}
//MARK - Toolbar
extension ChatRoomViewController {
override func didPressSendButton(button: UIButton!, withMessageText text: String!, senderId: String!, senderDisplayName: String!, date: NSDate!) {
let message = JSQMessage(senderId: senderId, senderDisplayName: senderDisplayName, date: date, text: text)
self.messages += [message]
self.finishSendingMessage()
}

override func didPressAccessoryButton(sender: UIButton!) {

}
}

当我运行它时,错误信息说

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[JSQMessage messageHash]: unrecognized selector sent to instance 0x7fdf0a6e1f60'

应用终止。

但是删除后运行良好

self.addDemoMessages()

viewDidLoad() 中的代码。所以我猜这段代码发生了错误,但我不知道如何修复 :( 我该如何修复它?

最佳答案

当我对 JSQMessage 对象进行子类化时,我遇到了类似的问题。如果您这样做,您只需要确保为消息数据实现 has。我只需要将此方法添加到我的 message 对象

func messageHash() -> UInt {
return UInt(self.hash)
}

希望对您有所帮助👻

关于ios - NSInvalidArgumentException 与使用 JSQMessagesViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36370723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com