Swift:无法预加载 Coredata

2024-01-03

当我在“目标 - 构建阶段 - 复制捆绑资源”下包含带有 Objective-C 的 SQLite 文件时,该文件将被完全复制到目标,即设备或模拟器。在目标上,我得到整个文件:表和内容(记录/行)。

对 Swift 进行同样的操作,表将被复制,但它们是空的:没有记录/行。 :-(

我可以做一些额外的事情吗?有什么“窍门”吗?

如何使用 Swift 预加载带有基本记录的核心数据???

我使用的是 Xcode v6.1.1,与 Beta 6.2 是一样的。


这是我的解决方案(对于 sqlite 文件)。我不知道为什么在 Swift 中这么“奢侈”。也许有更简单的方法?感谢 pbasdf!!!

重要的:在 *.sqlite-file 下,您必须将 *.sqlite-shm 和 *.sqlite-wal 添加到您的项目中 该文件将自动添加到“目标 - 构建阶段 - 复制捆绑资源”中

这是基于“AppDelegate.swift”的标准模板

lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = {
    // The persistent store coordinator for the application. This implementation creates and return a coordinator, having added the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail.
    // Create the coordinator and store
    var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)

    let dataName = „MyData.sqlite" // must be replaced by the name of your file!
    let modelName = „MyData“ // must be replaced by the name of your model!

    let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent(dataName)

    let fileManager = NSFileManager.defaultManager()
    let bundle = NSBundle.mainBundle()
    let fromURL = bundle.URLForResource(modelName, withExtension: "sqlite")

    // check sqlite-file: must it be installed?
    if !fileManager.fileExistsAtPath(url.path!) {
        self.copySqlliteFiles(modelName, databaseName: dataName)
    }

    var error: NSError? = nil
    var failureReason = "There was an error creating or loading the application's saved data."

    if coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options:  nil, error: &error) == nil {

...}

   return coordinator
}()

// MARK: - copy sqllite-files (c) by Ray Wenderlich & Team in „“Core Data by Tutorials“

// check sqlite-files: they must be installed...
func copySqlliteFiles(modelName: String, databaseName: String)
{
    let bundle = NSBundle.mainBundle()

    let baseDatabaseURL = bundle.URLForResource(modelName, withExtension: "sqlite")
    let documentsURL = self.applicationDocumentsDirectory
    let storeURL = documentsURL.URLByAppendingPathComponent(databaseName)
    NSFileManager.defaultManager().copyItemAtURL(baseDatabaseURL!, toURL: storeURL,error: nil)

    let baseSHMURL = bundle.URLForResource(modelName,withExtension: "sqlite-shm")
    let shmURL = self.applicationDocumentsDirectory.URLByAppendingPathComponent(databaseName + "-shm")
    NSFileManager.defaultManager().copyItemAtURL(baseSHMURL!, toURL: shmURL, error: nil)

    let walURL = self.applicationDocumentsDirectory.URLByAppendingPathComponent(databaseName + "-wal")
    let baseWALURL = bundle.URLForResource(modelName, withExtension: "sqlite-wal")
    NSFileManager.defaultManager().copyItemAtURL(baseWALURL!, toURL: walURL, error: nil)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift:无法预加载 Coredata 的相关文章

随机推荐

  • 我可以在 Sonata Admin 控制器中使用 prePersist/preUpdate 来保存多个对象吗?

    我有这个Alias entity use Gedmo Timestampable Traits TimestampableEntity class Alias use IdentifierAutogeneratedTrait use Tim
  • HttpURLConnection.getResponseCode() 在第二次调用时返回 -1

    当我使用的库 路标 1 1 SNAPSHOT 与远程服务器建立两个连续连接时 我似乎在 Android 1 5 上遇到了一个特殊问题 第二个连接总是失败并显示HttpURLConnection getResponseCode of 1 这是
  • AS3:合并 XML 文件

    这里有很多关于将 XML 与 Java 合并的帖子 但我似乎找不到任何针对同一任务的 Actionscript 参考 我有一组需要加载的 XML 文件 我希望它们在内存中排序为一个 XML 对象 例如 假设这些是我的 XML 文件 File
  • Spark SQL - gzip、snappy 和 lzo 压缩格式之间的区别

    我正在尝试使用 Spark SQL 来编写parquet file Spark SQL 默认支持gzip 但它也支持其他压缩格式 例如snappy and lzo 这些压缩格式有什么区别 压缩率 GZIP 压缩比 Snappy 或 LZO
  • 如何正确使用JVM -XX:MaxRAM选项? [复制]

    这个问题在这里已经有答案了 我使用以下参数运行 java 应用程序 bin bash export JVM OPTS XX MaxRAM 150m export JVM OPTS JVM OPTS XX UseSerialGC java J
  • 如何更改 IntelliJ 中所有模块的语言级别

    我有一个包含许多模块的项目 我们正在升级到 Java7 我希望我的编辑器能够反映这一点 现在我的所有模块都专门将语言级别设置为Java6 并且模块太多 我无法为每个模块更改此设置 如何将所有模块设置为 Java7 更好的是 如何设置所有模块
  • SharedPreferences 替换数据

    我有一个应用程序 每当我按下按钮时都会给我一些字符串 然后使用共享首选项保存该值 但是 我想限制此保存功能 因此它只会保存最后三个收到的字符串 其结构如下 字符串A 字符串 B 字符串 C 下次当我单击按钮时 它将将该值记录到字符串 A 中
  • Python:如何从列表中检查字符串中的子字符串? [复制]

    这个问题在这里已经有答案了 如何检查字符串中列表中包含的子字符串 例如检查字符串是否包含 字符串 列表中的元素 https stackoverflow com questions 500925 但是在 Python 中呢 试试这个测试 an
  • Lambda 表达式的代码覆盖率

    我在整个代码中看到一种模式 其中 lambda 表达式显示为未包含在代码覆盖范围内 调试器确实单步执行代码并且没有条件块 public CollectionModel List
  • Ocaml 变体类型

    无论我读什么教程 手册 OCaml 类型总是让我感到困惑 我需要定义一个类型 比如说测试 它包含以下形式 具有以下形式之一的类型 a b 测试 空 T t N n Seq x1 xn 我知道如何做前 3 个 但我完全不知道如何定义最后一个形
  • 从 git 标签获取版本(通过 pbr)

    I use pbr https pypi python org pypi pbr用于包装 它从 git 标签获取版本并将其应用于 setup py 现在我还想在包中提供可用的版本 例如有一个 version 属性 我可以使用pbr图书馆为此
  • Ionic 3:从 PlayStore 链接获取价值

    我有一个 Ionic 3 应用程序 我想根据 Playstore 的下载链接在其中设置一些变量 例如 http linktoplaystore com app account 4会将我的应用程序内的帐户变量设置为 4 有什么方法可以实现此目
  • CasperJS 将数据传回 PHP

    PHP 正在使用 CasperJS 调用exec 命令 CasperJS 完成检索网页部分内容等工作后 如何将检索到的数据返回给 PHP 我认为将数据从 CasperJS 传输到另一种语言 例如 PHP 的最佳方法是将 CasperJS 脚
  • 如何调试使用 Chrome/WebKit 作为远程调试器运行的 Node.js 服务器?

    如果你的节点正在运行 node debug server js 这给了我一个端口号 xxxx 我应该在启动 Chrome 时使用这个端口号吗 您是否从远程调试它Google Chrome remote debugging port xxxx
  • 如何测试使用 mechanize 的 ruby​​ 应用程序

    我编写了一个使用 Mechanize 遍历站点的小程序 我想为它编写测试 但不希望它在每次运行测试时都实际登录到该网站 我想模拟互联网 以便当它访问某个站点时 它只是返回存储的结果 这是一个小例子 假设我的代码的目的是从谷歌主页上提取链接
  • 如何制作表格超链接的单元格

    在没有 javascript 或 jquery 的情况下 如何在 html 中对整个表格单元格进行超链接 我尝试将 href 放入 td 标签本身 但至少在 chrome 18 中不起作用 td href http www m w com
  • 使用正则表达式排除某些字符

    尽我所能 我无法让正则表达式排除空格或单引号 允许使用字符串 abc 不允许 a bc abc abc 等 上例中的空格也可以替换 假定已删除尾随和前导空格 其他地方检查空字符串 目标语言是javascript 如果我使用 SQL 我会使用
  • Laravel - 雄辩的“Has”、“With”、“WhereHas” - 它们是什么意思?

    我发现这些方法背后的概念和含义有点令人困惑 有人可以向我解释一下它们之间的区别吗 has and with是 在一个例子的上下文中 如果可能的话 With with is for 急切加载 这基本上意味着 Laravel 将沿着主模型预加载
  • Facebook Graph 高分辨率照片

    我正在为 me home 执行 Facebook Graph API 调用 以获取用户的新闻源 众所周知 您在 图片 字段中获得的 URL 是低分辨率照片 在 100x100 以上的分辨率下看起来效果不佳 我知道您可以通过对 object
  • Swift:无法预加载 Coredata

    当我在 目标 构建阶段 复制捆绑资源 下包含带有 Objective C 的 SQLite 文件时 该文件将被完全复制到目标 即设备或模拟器 在目标上 我得到整个文件 表和内容 记录 行 对 Swift 进行同样的操作 表将被复制 但它们是