2015-02-06 59 views
0

我有这样的境界模型定义时:应用程序崩溃或死机解析领域模型

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 = "" 
} 
  • 当我运行的应用程序,它崩溃的:prop.column = table.add_column_link(tightdb::DataType(prop.type), prop.name.UTF8String, *linkTable);EXC_BAD_ACCESS
  • 在假设模型解析从顶部到底部,如果我将PSTChatThread移动到底部,应用程序会冻结。没有崩溃或任何事情,只是变得没有反应。

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

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

如果我的子类逻辑,我想问一件事。 PSTMessage没有任何方法持久化到模式,但只有它的子类可以吗?

感谢

回答

1

的问题是这一行

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

它只是需要

dynamic var environment: PSTChannelEnv 

我们objectClassName ...的原因是因为要创建一个使用数组输入objectClassName。在进行一对一关系时,您已经知道对象类,因此您可以直接设置类型。

下面是对setting up your models in Realm

更多的文档时,你尝试做这样的事情我们应该虽然抛出一个错误。感谢您指出了这一点!

+0

感谢哥们,那是非常有帮助的。你对我的子问题有答案吗?也就是说,如果我可以避免在架构中插入超类“PSTMessage”作为表。 – Thanos 2015-02-06 19:51:16

+0

目前还不是,空表虽然没有任何性能影响。你能否解释一下为什么你想避免在模式中使用它? – yoshyosh 2015-02-06 21:08:37

+0

实际上没有理由。只是不觉得有一张桌子在一生中不会有任何价值。再次感谢。 – Thanos 2015-02-06 21:20:22