swift - 在 Chat App 中为每个用户创建 Realm DB

标签 swift realm realm-mobile-platform

这个用于发送消息并将其保存到 realm db

 var messageIndex = try! Realm().objects(MessageRealm.self).sorted(byKeyPath: "timeStamp")

 func didPressSend(text: String) {
    if self.inputContinerView.inputTextField.text! != "" {
        let messageDB = MessageRealm()
        let realm = try! Realm()
        let userRealm = UsersRealm()

        messageDB.textDownloadded = text
        messageDB.fromId = user!.fromId
        messageDB.timeStamp = Date()
        print(messageDB)

        try! realm.write ({
            print(realm.configuration.fileURL)
            userRealm.msgs.append(messageDB)
            //realm.create(MessageRealm.self, value: ["textDownloadded": text, "fromId": user!.fromId, "timeStamp": Date()])
        })
        if let userTitleName = user?.toId {
            print(userTitleName)
            OneMessage.sendMessage(text, thread: "AAAWatree", to: userTitleName, isPhoto: false, isVideo: false, isVoice: false, isLocation: false, timeStamp: date, completionHandler: { (stream, message) in
                DispatchQueue.main.async {
                    OneMessage.sharedInstance.deleteCoreDataMessage()
                }
                self.inputContinerView.inputTextField.text! = ""
            })
        }
    }
}

这用于在收到消息时试图保存用户(发送 id)

  let realm = try! Realm()
                    userData.sender = sender
                    userData.toId = toUser
                    print(userData.sender)
                    print(userData.toId)
                        try! realm.write ({
                            realm.add(userData, update: true)

                        })

这是我的 Realm 对象类

class MessageRealm: Object {

dynamic var textDownloadded = String()
dynamic var imageDownloadded = NSData()
dynamic var videoDownloadded = String()
dynamic var voiceDownloadded = String()
dynamic var fromId = String()
dynamic var timeStamp = Date()
dynamic var messageId = NSUUID().uuidString
let userSelect = List<UsersRealm>()
override class func primaryKey() -> String? {
    return "messageId"
}

}

类 UsersRealm:对象 {

dynamic var sender = String()
dynamic var fromId = String()
dynamic var toId = String()
dynamic var lastMessage = String()
dynamic var timeStamp = Date()
dynamic var profileImage = NSData()
let msgs = List<MessageRealm>()
override class func primaryKey() -> String {
    return "sender"
}    
}

发送和接收是可以的并且它保存到 Realm 数据库但是所有任何用户发送的消息我在一个用户中收到我想分开每个用户都有他的发送和接收数据库我在这里遗漏了一些东西但我不知道我尝试搜索没什么长问题,但我想不出解决方案

对不起我的一周英语 谢谢

最佳答案

如果我对您的情况的理解正确,那么您正在为所有用户使用单一 Realm url,这就是为什么您的所有客户都具有相同数据的原因。您可能应该为对话创建一个单独的 Realm ,并在参与该聊天的用户之间共享它。请在我们的文档中了解更多关于共享 Realm 的信息:https://realm.io/docs/swift/latest/#access-control .

关于swift - 在 Chat App 中为每个用户创建 Realm DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44052285/

相关文章:

ios - 使用 Realm 按多个属性排序

swift - 我应该使用哪个动画师来交换 UILabel.text 值?

android - Android lib + 应用程序中的多个 Realm 实例

nginx - 如何使用 nginx 设置 Realm 对象服务器?

c# - 在 xamarin 中配置 Realm

swift - 无法使用 BaseCellData 类型的参数列表调用 'insert'

ios - 如何防止 UITableView 在 vi​​ewDidLoad 上重新加载?

ios - Realm Swift iOS - 由于未捕获的异常 'RLMException' 而终止应用程序,原因 : 'Realm accessed from incorrect thread'

Swift Realm 通过列表属性元素查询

swift - Realm 服务器对象不正确的线程异常