【问题标题】:Design CoreData database设计 CoreData 数据库
【发布时间】:2014-04-29 20:53:20
【问题描述】:

我正在寻找有关如何构建使用预填充数据的 iOS 核心数据应用程序的建议。 问题: 用户会看到一个预填充的(照片)sqlite 数据库(简单),但他们可以修改默认数据(替换/删除照片)。我想将默认照片保留在主包上,而不将任何内容复制到应用程序目录,但显然如果用户决定编辑/替换照片,我无法向主包写入任何内容。

我不希望将照片保留在 sqlite 中,也不希望将默认照片复制到应用程序目录(因为 Apple 不喜欢添加用户未添加到应用程序目录的任何内容)。 问题: 如何从主包调用默认照片,但从应用目录调用编辑/替换的照片?

任何想法将不胜感激......

类似:

if (userEditedPhoto) {

imageView.image = //appDirectory:userPhoto

}

else {

imageView.image = //mainBundle:defaultPhoto

}

谢谢

【问题讨论】:

标签: ios sqlite core-data


【解决方案1】:

对于核心数据方面,这非常简单:

  1. 创建包含在您的应用程序包中的基于 Core Data 的 SQLite 文件
  2. 在启动时创建一个新的NSPersistentStore,它位于文档目录中
  3. 将这两个商店添加到NSPersistentStoreCoordinator。

Core Data 会将它们视为一个单独的存储,您可以同时读取和写入其中一个。复制正在编辑的图像非常简单,因此除非您有问题,否则我不会详细说明。

更新

Core Data 不是数据库,它是对象存储。该对象存储可以根据需要使用磁盘上任意数量的单独文件。我上面的建议是在磁盘上有两个文件,从两个文件中读取并只写入一个文件。从而为您提供预取的数据。

【讨论】:

  • @Marcus 我认为创建两个图像模型(一个瞬态,一个持久化),其中瞬态模型将在运行时从应用程序包动态加载将是可行的方法。这样,图像可以进入应用程序资源包,并且他可以为两者使用单个 Core Data 图(同时仍然保持逻辑分离)。除非我错过了什么。
  • 但是,如果我从一个读取并写入另一个,如果用户决定替换预加载的图像,它如何区分编辑/替换的图像?它总是从预加载的....中读取。
  • @GeorgeAsda 这是一个我确信你可以解决的编码问题。您可以在实体中放置一个状态属性以进行区分。您可以跟踪NSPersistentStore。我相信你会想到很多其他方式。
  • @smyrgl 如果它是从应用程序包加载的,则它不是瞬态的。通过将应用程序包商店标记为只读,写入将始终转到 OP 想要的另一个商店。
  • 我觉得这个太复杂了,连尝试都做不到。我要做的是:将数据库安装到文档目录(从主包中读取)。如果/当用户决定编辑数据库时,将所有内容复制到文档目录,然后从那里读取和写入文档目录。 Apple 已经严重 f#!^# 我们不允许将大文件写入文档目录。
猜你喜欢
  • 2016-05-27
  • 2011-09-30
  • 2011-01-12
  • 2010-11-29
相关资源
最近更新 更多