【问题标题】:Thread 1: Fatal error: NSArray element failed to match the Swift Array Element type线程 1:致命错误:NSArray 元素无法匹配 Swift Array 元素类型
【发布时间】:2018-12-11 09:38:40
【问题描述】:

我有我的 Messages 自定义类,声明如下:

class Message: SBDBaseMessage {

    var text : String?
    var date: Date?

    init(text: String, date: Date) {
        super.init()
        self.text = text
        self.date = date
    }
}

注意:SBDBaseMessageSendBird 消息传递框架的自定义消息类型。

然后,我有一个像这样声明的空数组:

var messages: [Message] = [Message]()

在下面的代码块中,我收到了这个崩溃消息(在第二行)->

线程 1:致命错误:NSArray 元素无法匹配 Swift 数组 元素类型

代码如下:

func sendMessage() {
    if let channel = self.groupChannel {
        channel.sendUserMessage(textView.text) { (message, error) in
            guard error == nil else { return }
            let newMessage: Message = Message(text: (message?.message)!, date: Date())
            self.messages.append(newMessage)
            self.tableView.reloadData()
        }
    }
}

这里的消息是一个SBDUserMessage,它继承自SBDBaseMessage

我做错了什么?任何帮助将不胜感激

【问题讨论】:

  • 你确定崩溃就是在这个地方产生的吗?当从 Objective-C NSArray 桥接到 Swift Array 时会出现问题,但在这种情况下没有 NSArray。你能发布一个更大的代码sn-p吗?也许包含您发布的代码的整个方法?
  • 您提到失败代码块中的消息是SBDUserMessage - 这是与您自己的Message 类(继承自SBDBaseMessage)不同的类。要附加的消息必须与声明数组时使用的类完全相同。
  • @Chris 我认为 OP 意味着将 message 参数传递给 Message 构造函数。 SBDUserMessage 确实包含 message 属性,即 NSString
  • @mag_zbc 好的,谢谢。
  • 当然,@mag_zbc,我已经更新了问题并添加了更大的代码 sn-p

标签: ios swift


【解决方案1】:

好的,我找到了这个错误的原因。 我的messages 数组被附加到另一个带有SBDUserMessages 的代码块中,并且我没有将它们转换为确切的消息类型(as! SBDUserMessage)。

调试确实帮了大忙。在某个时候,我决定在 self.messages.append(newMessage)(实际发生崩溃的地方)之前调用 messaged.removeAll(),然后我发现一切正常。

【讨论】:

    猜你喜欢
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    相关资源
    最近更新 更多