/ / Реалізм з комплектуванням із програмою та міграцією - іос, швидкий, швидкий2, царство, сфера міграції

Реалізація пакетів з додаванням та переміщенням - іос, швидка, швидка2, королівство, сфера міграції

Я дотримуюся документації Королівства про міграцію та об'єднання сфери з додатком.

Я використовую такий код, щоб скопіювати сукупність Realm як статус Default 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! Царство (), результати, які він повертає, завжди порожні.

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

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

Я не знаю, чи спричиняє ця початкова глобальна декларація uiRealm. Я також намагався оголосити локальні версії, але це, здається, не виправляє його.

Слід зазначити, що якщо я повторно запускаю додаток, коли файл Realm вже існує, все добре.

Відповіді:

1 для відповіді № 1

Дякуємо за вияснення цього uiRealm показ на вершині вашого делегата. Я гарненько впевнений, що це буде те, що викликає проблему.

Realm кешує внутрішні копії його Realm екземпляри, тому надзвичайно важливо, що якщо ви переміщуєте будь-які файли навколо диска, це робиться перед тим, як створювати будь-які Realm() об'єкти (або виконувати будь-які операції Королівства де Realm екземпляри створюються, інкапсулюються в a @autoreleasepool)

У цьому випадку ви повинні переконатися в цьому uiRealm спершу торкнеться лише після того, як ви виконали початкову настройку файлу.