2016-09-04 8 views
0

Я следую документации по Realm по миграции и при объединении области с приложением.Слияние с приложениями и миграцией

Я использую следующий код, чтобы скопировать объединенное Королевство в качестве Realm. который работает хорошо.

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

Это все работает нормально, и я могу видеть правильный файл Realm, в котором есть данные. Однако, если я использую realm = try! Realm(), результаты, которые он возвращает, всегда пусты.

Следует отметить, что у меня есть следующее заявление в верхней части AppDelegate.swift

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

я не уверен, если это начальная глобальная декларация uiRealm вызывает проблему. Я также попытался объявить локальные версии, но это, похоже, не исправляет.

Следует отметить, что если я снова запустил приложение, когда файл Realm уже на месте, все будет в порядке.

ответ

1

Благодарим за разъяснение, что uiRealm экземпляр в верхней части вашего делегата. Я уверен, что это будет причиной.

Realm кэширует внутренние копии своих Realm экземпляров, так что это очень важно, что, если вы двигаетесь любые файлы вокруг на диске, вы делаете это, прежде чем создавать какие-либо Realm() объектов (Или любое Realm операции, где создаются Realm экземпляров, заключен в @autoreleasepool).

В этом случае вы должны убедиться, что в первый раз коснулся uiRealm только после того, как вы выполнили начальную настройку файла.

Смежные вопросы