无法将 SINMessage 类型的值转换为 ChatMessage (Swift)
Could not cast value of type SINMessage to ChatMessage (Swift)
目前正在尝试将 Sinch SDK 桥接到我的 Swift 应用程序中,我 运行 遇到以下错误:
"Could not cast value of type '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) 然后代码在上述代码段的第二行崩溃。
let chatMessage: ChatMessage = (notification.userInfo["message"] as! ChatMessage)
有关更多信息,这里是我也尝试投射的 swift class "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" class 中,因为我在 Bridging-Header 中有它)
所以,我 missing/doing 哪里错了?
你应该使用 SINOutgoing 而不是 sinMessage,你不需要自己实现 sinmessage 协议。
编辑:
因此,与其尝试解析 notificationm 传递推送到 sinch 客户端并对传入消息做出反应,
id<SINClient> client; // get previously created client
[client relayRemotePushNotification:userInfo];
https://www.sinch.com/docs/instant-message/ios/#localandremotepushnotifications
好的...
经过几天的测试变通办法,我找到了解决方案。
问题似乎是,就像博纳德建议的那样,"SIN" 类型不符合 "ChatMessage" class.
的要求
因此,我没有尝试通过 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" class!
感谢所有提供帮助的人。
目前正在尝试将 Sinch SDK 桥接到我的 Swift 应用程序中,我 运行 遇到以下错误:
"Could not cast value of type '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) 然后代码在上述代码段的第二行崩溃。
let chatMessage: ChatMessage = (notification.userInfo["message"] as! ChatMessage)
有关更多信息,这里是我也尝试投射的 swift class "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" class 中,因为我在 Bridging-Header 中有它)
所以,我 missing/doing 哪里错了?
你应该使用 SINOutgoing 而不是 sinMessage,你不需要自己实现 sinmessage 协议。
编辑:
因此,与其尝试解析 notificationm 传递推送到 sinch 客户端并对传入消息做出反应,
id<SINClient> client; // get previously created client
[client relayRemotePushNotification:userInfo];
https://www.sinch.com/docs/instant-message/ios/#localandremotepushnotifications
好的...
经过几天的测试变通办法,我找到了解决方案。 问题似乎是,就像博纳德建议的那样,"SIN" 类型不符合 "ChatMessage" class.
的要求因此,我没有尝试通过 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" class!
感谢所有提供帮助的人。