/ / Bundle Realm mit App und Migration - ios, swift, swift2, realm, realm-migration

Bundle Realm mit App und Migration - ios, swift, swift2, realm, realm-migration

Ich befolge die Realm-Dokumentation zur Migration und zur Bündelung eines Realms mit einer App.

Ich verwende den folgenden Code, um das gebündelte Realm als Standard-Realm zu kopieren. das funktioniert gut.

let initialURL = NSBundle.mainBundle().URLForResource("bootstrap_v001", withExtension: "realm")!
let defaultURL = Realm.Configuration.defaultConfiguration.fileURL!

if Realm.Configuration.defaultConfiguration.schemaVersion == 0 {
do {
try NSFileManager.defaultManager().removeItemAtURL(defaultURL)
try NSFileManager.defaultManager().copyItemAtURL(initialURL, toURL: defaultURL)
} catch {
// Handle error here
print("realm delete copy error!!")
}
}

Das alles funktioniert OK und ich kann die richtige Realm-Datei sehen, die Daten enthält. Wenn ich jedoch realm = try! Realm (), die Ergebnisse, die es zurückgibt, sind immer leer.

Es sollte beachtet werden, dass ich die folgende Deklaration oben in AppDelegate.swift habe

import UIKit
import RealmSwift
let uiRealm = try! Realm()

Ich bin mir nicht sicher, ob diese anfängliche globale Erklärung von uiRealm das Problem verursacht. Ich habe versucht, auch lokale Versionen zu deklarieren, aber das scheint es nicht zu beheben.

Es sollte beachtet werden, dass, wenn ich die Anwendung erneut ausführen, wenn die Realm-Datei bereits vorhanden ist, die Dinge in Ordnung sind.

Antworten:

1 für die Antwort № 1

Danke, dass du das erklärt hast uiRealm Instanziierung an der Spitze Ihres Delegaten. Ich bin mir ziemlich sicher, dass das das Problem verursachen würde.

Realm speichert interne Kopien seiner Realm Instanzen, so dass es äußerst wichtig ist, dass wenn Sie irgendwelche Dateien auf der Festplatte verschieben, Sie dies tun, bevor Sie eine erstellen Realm() Objekte (Oder machen Sie Realm-Operationen wo Realm Instanzen werden erstellt, gekapselt in einem @autoreleasepool).

In diesem Fall sollten Sie sicherstellen, dass uiRealm wird erst berührt, nachdem Sie Ihre erste Dateieinrichtung vorgenommen haben.