/ / Bundling Realm s aplikáciou a migráciou - ios, swift2, realm, realm-migrácia

Bundling Realm s aplikáciou a migráciou - ios, swift, swift2, realm, migration-realm

Sledujem dokumentáciu z oblasti Realm o migrácii ao balíku oblastí s aplikáciou.

Používam nasledujúci kód na skopírovanie balíka Realm, ktorý má byť predvolený Realm. funguje dobre.

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

To všetko funguje OK a vidím správny súbor Realm, v ktorom sú údaje. Ak však použijem realm = try! Realm (), výsledky, ktoré vráti, sú vždy prázdne.

Je potrebné poznamenať, že v hornej časti AppDelegate.swift mám nasledujúce vyhlásenie

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

"Nie som si istý, či toto počiatočné globálne vyhlásenie uiRealm spôsobuje problém. Snažil som sa tiež deklarovať lokálne verzie, ale to sa nezdá, že by to opravilo."

Je potrebné poznamenať, že ak znovu spustím aplikáciu, keď súbor Realm je už na mieste, veci sú v poriadku.

odpovede:

1 pre odpoveď č. 1

Ďakujeme za objasnenie uiRealm inštancie v hornej časti vášho delegáta. "Som si istý, že by to bolo to, čo spôsobuje problém."

Realm ukladá interné kópie svojej kópie Realm inštancie, takže je veľmi dôležité, že ak si "premiestňujete všetky súbory na disku, urobíte tak pred vytvorením akéhokoľvek Realm() objekty (Alebo vykonajte akékoľvek operácie ríše kde Realm inštancie sú vytvorené, zapuzdrené v @autoreleasepool).

V tomto prípade by ste sa mali uistiť uiRealm sa najprv dotknete až po vykonaní úvodného nastavenia súboru.