Я дотримуюся документації Королівства про міграцію та об'єднання сфери з додатком.
Я використовую такий код, щоб скопіювати сукупність 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
спершу торкнеться лише після того, як ви виконали початкову настройку файлу.