Swift 3, Xcode 8, RealmSwift 2.0.2, Realm Object Server 1.0Verschiedene Realm Konfigurationen erscheinend in Swift App
In meinem AppDelegate habe ich eine Funktion, die meine Realm-Konfiguration setzt zu einem Remote verbinden Sync-Server, den ich eingerichtet habe. Ich verwende nur einen Testaccount zur Authentifizierung, bis ich die Grundlagen der Synchronisierung erhalten kann. 1.1.1.1
ist nicht meine echte IP-Adresse. ;)
let username = "test"
let password = "test"
let address = "http://1.1.1.1:9080"
let syncAddress = "realm://1.1.1.1:9080/~/myapp"
SyncUser.authenticate(with: Credential.usernamePassword(username: username, password: password, actions: []), server: URL(string: address)!, onCompletion: { user, error in
guard let user = user else {
fatalError(String(describing: error))
}
// Open Realm
Realm.Configuration.defaultConfiguration = Realm.Configuration(
syncConfiguration: (user, URL(string: syncAddress)!)
)
})
Das scheint gut zu funktionieren. Ich sehe Daten auf meinem Server erscheinen, und ich bekomme keine Fehler. Meine Annahme ist, dass das Setzen der Realm-Konfiguration bedeutet, dass alle Instanzen von Realm()
diese Konfiguration verwenden.
ich dann ein realm
Objekt als Klasseneigenschaft in zwei separaten View-Controller:
class TableViewControllerA: UITableViewController{
let realm = try! Realm()
override func viewDidLoad() {
// CORRECT: Prints "nil" as it should for a remotely synced Realm instance
print(realm.configuration.fileURL)
}
}
... und eine andere in einer anderen Datei:
class ViewControllerB: UIViewController{
let realm = try! Realm()
override func viewDidLoad() {
// WRONG: Prints the path to the local realm file in the Simulator
print(realm.configuration.fileURL)
}
}
Wie in den Code-Kommentaren darauf hingewiesen, oben sind die beiden Instanzen von realm
unterschiedlich. Auf einigen meiner View-Controller kann ich Objekte auf dem Server speichern und sie auf meinem Gerät anzeigen lassen. Auf anderen View-Controllern werden keine Daten angezeigt, da die falsche Realm-Datenbank verwendet wird.
Kann ich nicht zuverlässig erwarten, dass eine Realm-Konfiguration in meiner App bestehen bleibt? Muss ich etwas anderes tun, um dieselbe Konfiguration zu verwenden?
Überprüfen Sie, ob der View-Controller vor der Festlegung der Standardkonfiguration instanziiert wird. – bdash
Ich setze die Standardkonfiguration in meinem App Delegate. Kann ich nicht garantieren, dass das zuerst passiert? –
Der von Ihnen gepostete Code zeigt, dass Sie die Standardkonfiguration in einem Rückruf festlegen, der asynchron aufgerufen wird, nachdem der Benutzer authentifiziert wurde. – bdash