【问题标题】:Could not cast value of type SINMessage to ChatMessage (Swift)无法将 SINMessage 类型的值转换为 ChatMessage (Swift)
【发布时间】:2015-12-24 19:25:13
【问题描述】:

目前正在尝试将 Sinch SDK 桥接到我的 Swift 应用程序中,但遇到以下错误:

“无法将“SINMessageRebRTCImpl”类型的值转换为“ChatMessage””

1) SINMessageRebTyCImpl 类型在 AppDelegate.swift 文件中的以下函数中创建:

 func messageSent(message: SINMessage, recipientId: String) {
    self.saveMessagesOnParse(message)
**NSNotificationCenter.defaultCenter().postNotificationName(SINCH_MESSAGE_SENT, object: self, userInfo: ["message": message])** }

2) SINMessageRebTyCImpl 然后传递给位于我的视图控制器之一中的以下函数

func messageDelievered(notification: NSNotification){
let chatMessage: ChatMessage = (notification.userInfo["message"] as! ChatMessage)
self.messageArray.append(chatMessage)
}

3) 然后代码在上述 sn-p 的第二行崩溃。

let chatMessage: ChatMessage = (notification.userInfo["message"] as! ChatMessage)

有关更多信息,这里是我也尝试转换的 swift 类“ChatMessage”的代码。

Import UIKit
Import Foundation

class ChatMessage: NSObject, SINMessage {
    var messageId: String
    var recipientIds: [AnyObject]
    var senderId: String
    var text: String
    var headers: [NSObject : AnyObject]
    var timestamp: NSDate
}

(注意,“Import Sinch”不需要在上面列出的“ChatMessage”类中,因为我在 Bridging-Header 中有它)

那么,我错过了什么/做错了什么?

【问题讨论】:

  • 课程是什么样的,如果您仍然需要帮助,请发布该课程的代码
  • 这是第二个代码块。 :)
  • 对不起,当我问这个问题时,有些东西被切断了,我正在寻找这个类:SINMessageRebRTCImpl。那是它抱怨的那个,所以想看看它是由什么制成的
  • 你得到的错误告诉我你已经创建了一个 SINMessageRebRTCImpl 类型的对象并且你试图将它转换为 ChatMessage。但是,您没有在哪里表明这种类型的 SINMessageRebRTCImpl 是从 ChatMessage 继承的。我看到 ChatMessage 遵循 SINMessage 协议,但它看起来与 SINMessageRebTyCImpl 的类型不同。那么你能发布 SINMessageRebTyCImpl 的血统吗?这可能会帮助你得到你的答案。还是我错过了什么?
  • 我想这就是你的答案,它从不遵守聊天消息并且没有继承所以它会抛出错误

标签: xcode swift parse-platform sinch


【解决方案1】:

你应该使用SINOutgoing而不是sinMessage,你不需要自己实现sinmessage协议。

编辑:

因此,与其尝试将通知解析推送到 sinch 客户端并对传入消息做出反应,

id<SINClient> client; // get previously created client 
[client relayRemotePushNotification:userInfo];

https://www.sinch.com/docs/instant-message/ios/#localandremotepushnotifications

【讨论】:

  • 刚刚测试了这个,似乎没有我可以在课堂上放置的“SINOutgoing”。你能稍微描述一下吗?
  • 尽管我刚刚意识到我正试图在我的 swift 应用程序中实现它是您的 github,但仍然无法准确地确定您的建议。我已经更新了这个问题,以提供更多关于我正在尝试做的事情的背景信息。也许你可以再看看我的问题。谢谢
  • hello Cjensen func messageSent(_ message: SINMessage!, recipientId: String!) { SINMessage not found in Sinch v.1.4.0 告诉我它是如何实现的
【解决方案2】:

好的...

所以经过几天的测试变通办法后,我找到了我的解决方案。 问题似乎是,就像 bolnad 建议的那样,“SIN”类型不符合“ChatMessage”类的要求。

因此,我没有尝试通过 NSNotification 变量传递整个数组,而是将其分解如下并将它们设置为 NSDefaults

let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()    
    chatMessage.senderId = prefs.valueForKey("SENDERID") as! String
    chatMessage.text = prefs.valueForKey("TEXT") as! String
    chatMessage.messageId = prefs.valueForKey("MESSAGEID") as! String
    chatMessage.timestamp = prefs.valueForKey("TIMESTAMP") as! NSDate
    chatMessage.recipientIds = prefs.valueForKey("RECIPIENTID")  as! [AnyObject]!
    self.messageArray.append(chatMessage)
    self.historicalMessagesTableView.reloadData()
    self.scrollTableToBottom()

这样做,我能够毫无问题地满足“ChatMessage”类!

感谢所有提供帮助的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-01
    • 2016-01-12
    • 2017-04-09
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多