Ich versuche Realm.IO Migration aus dem folgenden Modell auszuführen:Optional Int Eigenschaft enthält nil statt Null bei der Migration
public class RealmBuddy: Object {
dynamic var id = 0
let contactId = RealmOptional<Int>()
dynamic var name = ""
let topics = List<RealmTopic>()
override static func primaryKey() -> String? {
return "id"
}
}
auf die folgenden:
public class RealmBuddy: Object {
dynamic var id = 0
dynamic var contactId: String? = nil
dynamic var name = ""
let topics = List<RealmTopic>()
override public static func primaryKey() -> String? {
return "id"
}
}
Wie Sie sehen können, Die einzelne Änderung hat den Typ contactId: optional Int
sollte in optional String
konvertiert werden. Ich habe es wie folgt umgesetzt:
if (oldSchemaVersion < 1) {
migration.enumerate(RealmBuddy.className()) { oldObject, newObject in
if let contactId = oldObject!["contactId"] as? Int {
newObject!["contactId"] = "\(contactId)"
}
}
}
Allerdings habe ich festgestellt, dass nach der Migration meine Einheiten, die keine ContactID hatte (das heißt nil
Wert) jetzt gleich ContactID auf „0“ string. Es scheint, dass oldObject! ["ContactId"] 0 anstelle von nil zurückgibt.
Ich habe keine Informationen oder Beispiele zur Durchführung dieser einfachen Aufgabe gefunden, also bin ich nicht sicher, ob ich den Wert richtig abrufen/werfen (versuchte auch RealmOptional<Int>
zu übertragen), also habe ich mich entschieden, hier nachzufragen bevor Sie eine Ausgabe auf GitHub einreichen. Ist es ein Fehler oder erwartetes Verhalten? Wenn es erwartetes Verhalten ist, wie man Wert richtig erhält?
PS: Mein Projekt ist Open-Source, weil ich auf iOS bin neu und entwickeln es für Selbsterziehung, so schob ich es auf eine repo wo das Problem kann leicht reproduziert werden (bitte beachten Sie, dass es in migration_issue Zweig). Ich machte auch eine unit test mit bestehenden .realm
Datei, die während des Tests zu neuen Schema migriert. Hoffe das wird helfen.
PPS: Ich habe versucht, 0.102.1 und 0.103.1 Versionen der Bibliothek.
PPPS: Es wurde erwähnt, dass der Realm Browser keine contactId mit dem Wert nil in meiner realm-Beispieldatei anzeigt. Ich denke, es ist nur Realm Browser Problem, so dass ich eine andere unit test in separaten Zweig, um zu beweisen, dass die alte Datenbank Nullwert hat.
Ich hatte auch diese Idee, als ich versuchte, die Datenbank im Realm Browser zu öffnen. Wenn ich jedoch eine .realm-Datei über Code lade, ist * * kein Wert - Datensatz mit dem Namen "Roman Petrenko" hat es. Ein anderer Kontakt ("Kate Bell") hat contactId == 1. Also ich denke Realm Browser kann nur noch keine Nullwerte anzeigen. –
Ich habe meine Antwort und Repo aktualisiert, um das Vorhandensein von Nullwerten in default-v0.realm zu demonstrieren –