Das ist meine eigentliche Implementierung für eine Chat-Anwendung ist RealmSwift verwenden. Ich benutzen ein Modellobjekt namens Nachricht unten definiert:
class Message: Object {
dynamic var userId = ""
dynamic var name = ""
dynamic var text = ""
dynamic var dateCreated = NSDate()
}
Next ich einen Controller für das Senden und Sync-Nachrichten erstellt wurde:
// Instance variables
var messages: Results<Message>!
var token: NotificationToken!
var configuration: Realm.Configuration!
override func viewDidLoad() {
super.viewDidLoad()
// Your viewDidLoad implementation
self.setupRealm()
}
Weiter, um das Setup-Verfahren für Realm. Wie in Real Documentation erwähnt, müssen Sie, wenn ein Realm über Nur-Lese-Berechtigungen verfügt, die API asyncOpen
verwenden, wie unter Asynchron öffnende Realms beschrieben. Das Öffnen eines read-only
Realms ohne asyncOpen
führt zu einem Fehler.
private func setupRealm() {
let serverURL = URL(string: "http://your.server.ip:9080")!
let credentials = SyncCredentials.usernamePassword(username: "[email protected]", password: "password")
SyncUser.logIn(with: credentials, server: serverURL) { user, error in
if let user = user {
let syncURL = URL(string: "realm://your.server.ip:9080/~/Message")!
let syncConfig = SyncConfiguration(user: user, realmURL: syncURL)
self.configuration = Realm.Configuration(syncConfiguration: syncConfig)
self.setupDataSource()
} else if let error = error {
// handle error
debugPrint("error: \(error.localizedDescription)")
}
}
}
private func setupDataSource() {
Realm.asyncOpen(configuration: self.configuration) { realm, error in
if let realm = realm {
// Realm successfully opened, with all remote data available
self.messages = realm.objects(Message.self).sorted(byKeyPath: "dateCreated", ascending: true)
self.token = self.messages.addNotificationBlock({ (changes: RealmCollectionChange) in
debugPrint("Message update event")
self.collectionView.reloadData()
})
} else if let error = error {
// Handle error that occurred while opening or downloading the contents of the Realm
debugPrint("error: \(error.localizedDescription)")
}
}
}
deinit {
self.token?.stop()
}
Schließlich wird die sendMessage()
Methode, die ich verwenden, um die Nachricht zu senden:
func sendMessage(id: String, name: String, text: String) {
let message = Message()
message.userId = id
message.name = name
message.text = text
message.dateCreated = NSDate()
Realm.asyncOpen(configuration: self.configuration) { realm, error in
if let realm = realm {
// Realm successfully opened, with all remote data available
try! realm.write() {
realm.add(message)
}
} else if let error = error {
// Handle error that occurred while opening or downloading the contents of the Realm
debugPrint("error: \(error.localizedDescription)")
}
}
}
Hoffe, es hilft! Tschüss!
Können Sie weitere Details angeben? Kannst du deinen Code mit Realm und Login anzeigen? Kannst du auch das Log des Realm Objekt Servers anzeigen? –