swift - 将 Realm 与 A​​pp 部分捆绑在一起

标签 swift cocoa realm

我正在尝试将 Realm 文件与我的应用捆绑在一起。我按照步骤1-5进行了操作,但是步骤6我不清楚。它说将文件复制回文档文件夹,特别是如果它将被用户编辑。

假设,复制语句进入 AppDelegate(类似于示例迁移代码中的做法),并且文件被复制,下一次启动应用程序时会发生什么?它会再次复制文件并覆盖它吗?我错过了什么吗?

我是否需要在发布应用程序之前运行一次,然后从应用程序委托(delegate)中删除代码?

编辑:这个问题是关于 realm-swift

最佳答案

如果您将 Realm 文件与您的应用程序捆绑在一起,它将存储在您的应用程序包中的 Resources 目录中,该目录不可写(由于代码签名)。因此,如果您希望您的用户能够更改此数据,您必须将此文件复制到某个具有写访问权限的目录。应用程序的 Documents 目录似乎是一个不错的选择,它也是默认 Realm.Configuration 的默认目录。

如果它是您应用的初始数据并且您不想在每次应用启动时都覆盖它,您可以简单地检查目标文件是否存在并且在这种情况下不复制您的初始数据库。

你可以这样做:

let initialURL = NSBundle.mainBundle().URLForResource("initial", withExtension: "realm")!
let defaultURL = Realm.Configuration.defaultConfiguration.fileURL!

if (!defaultURL.checkResourceIsReachableAndReturnError(nil)) {
    do {
        try NSFileManager.defaultManager().copyItemAtURL(initialURL, toURL: defaultURL)
    } catch {
        // Handle error here
    }
 }


 let realm = try! Realm()

关于swift - 将 Realm 与 A​​pp 部分捆绑在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38001476/

相关文章:

ios - Firebase 实时数据库不保存注册页面的数据

ios - 以编程方式修改约束 Swift

cocoa - 重用 NSPredicate 进行新变量替换

objective-c - 如果选中一个复选框,如何删除表中的一行(Cocoa)?

macos - OSX 建议在已安装的驱动器中搜索/查找文件夹

ios - 登录后如何在 swift 4 中使用主视图 Controller 设置侧菜单

ios - Swift:使用元组的单个开关案例中的多个间隔

ios - 新对象数据未在 Realm 中更新

java - 创建 Realm 对象时出现问题( IllegalStateException : Cannot modify managed objects outside of a write transaction)

android - Realm 在 executeTransactionAsync 的 onSuccess 回调中关闭错误