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.