解析 Realm 模型时应用程序崩溃或冻结

App crashes or freezes when parsing Realm models

我有这个 Realm 模型定义:

class PSTChatThread: RLMObject {
    dynamic var channelName = ""
    dynamic var environment = RLMObject(object: PSTChannelEnv.className())
    dynamic var chatMessages = RLMArray(objectClassName: PSTMessage.className())
}

class PSTChannelEnv: RLMObject {
    dynamic var associatedPlaceId = 0
    dynamic var chattingWithUuid = ""
    dynamic var chattingWithUsername = ""
    dynamic var hasSessionEnded = false
    dynamic var unreadMessages = 0
}

class PSTMessage: RLMObject {

    // type
    dynamic var typeRaw = ""
    var type: PSTProtocolMsgTypes {
        get {
            if let a = PSTProtocolMsgTypes(rawValue: typeRaw) {
               return a
           }
           return .ChatMsg
        }
     }

    // envelope
    dynamic var channel = ""
    dynamic var timeoken = 0

 }

class ChatMsg: PSTMessage {
    dynamic var msgId = ""
    dynamic var text = ""
    dynamic var username = ""
    dynamic var uuid = ""
    dynamic var associatedPlaceId = -1
 }

 class ACKMsg: PSTMessage {
    dynamic var forId = ""
    dynamic var uuid = ""
 }

 class UserTypingMsg: PSTMessage {
    dynamic var uuid = ""
 }

 class UserStoppedTypingMsg: PSTMessage {
    dynamic var uuid = ""
 }

 class SessionUpdateMsg: PSTMessage {
     dynamic var hasSessionEnded = false
     dynamic var uuid = ""
 }

 class ContactDetailsMsg: PSTMessage {
    dynamic var accessLevel = -1
    dynamic var uuid = ""
 } 

 class ReadReceiptMsg: PSTMessage {
    dynamic var uuid = ""
 }

PSTChatThread 定义似乎有问题。如果这被注释掉,一切似乎都工作正常。

每当我对模型进行 RMRealm 调用或任何其他查询调用时,都会发生这种情况。

如果我的子类化逻辑,我想再问一件事。有什么方法可以使 PSTMessage 不会持久化到架构中,而只有它的子类才能持久化?

谢谢

这一行有问题

dynamic var environment = RLMObject(object: PSTChannelEnv.className())

只需

dynamic var environment: PSTChannelEnv

我们有 objectClassName... 的原因是因为您正在创建一个类型为 objectClassName 的数组。做一对一关系时,你已经知道对象class,所以你可以直接设置类型

setting up your models in Realm

上有更多文档

不过,当您尝试执行此类操作时,我们应该会抛出一个错误。感谢您指出这一点!