/ / Bundling Realm con App y Migration - ios, swift, swift2, realm, realm migration

Reparto de dominios con aplicación y migración: ios, swift, swift2, realm, realm-migration

Estoy siguiendo la documentación del Reino sobre la migración y sobre cómo agrupar un reino con una aplicación.

Estoy usando el siguiente código para copiar el Reino empaquetado para que sea el Reino predeterminado. que funciona bien

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!!")
}
}

Todo esto funciona bien y puedo ver el archivo Realm correcto que contiene datos. Sin embargo, si uso realm = try! Realm (), los resultados que devuelve están siempre vacíos.

Cabe señalar que tengo la siguiente declaración en la parte superior de AppDelegate.swift

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

No estoy seguro de si esta declaración global inicial de uiRealm está causando el problema. También he intentado declarar versiones locales, pero esto no parece solucionarlo.

Se debe tener en cuenta que si vuelvo a ejecutar la aplicación cuando el archivo Realm ya está en su sitio, las cosas están bien.

Respuestas

1 para la respuesta № 1

Gracias por aclarar que uiRealm instanciación en la parte superior de su delegado. Estoy bastante seguro de que eso es lo que está causando el problema.

El reino almacena copias internas de su Realm instancias, por lo que es extremadamente importante que si mueve cualquier archivo en el disco, hágalo antes de crear cualquier Realm() objetos (o hacer cualquier operación de Reino donde Realm Las instancias son creadas, encapsuladas en un @autoreleasepool)

En este caso, debe asegurarse de que uiRealm se toca por primera vez solo después de haber realizado la configuración inicial del archivo.