将Realm与App和Migration捆绑在一起

时间:2016-09-04 20:39:32

标签: ios swift swift2 realm realm-migration

我正在关注有关迁移的Realm文档以及将域与应用程序捆绑在一起。

我使用以下代码将捆绑的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 =试试! Realm(),它返回的结果总是空的。

应该注意的是,我在AppDelegate.swift

的顶部有以下声明
import UIKit
import RealmSwift
let uiRealm = try! Realm()

我不确定这个uiRealm的初始全球声明是否导致了这个问题。我也尝试过声明本地版本,但这似乎并没有解决它。

应该注意的是,如果我在Realm文件已经存在的情况下重新运行应用程序,那么一切都很好。

1 个答案:

答案 0 :(得分:1)

感谢您澄清代理顶部的uiRealm实例化。我很确定这会导致这个问题。

Realm缓存其Realm实例的内部副本,因此,如果您要在磁盘上移动任何文件,那么在创建任何Realm()对象之前执行此操作非常重要(或者执行任何Realm创建Realm个实例的操作,封装在@autoreleasepool)中。

在这种情况下,您应该确保只有在完成初始文件设置后才会首先触摸uiRealm