Ios CoreData数据库的设计

Ios CoreData数据库的设计,ios,sqlite,core-data,Ios,Sqlite,Core Data,我在寻找如何构建使用预填充数据的iOS核心数据应用程序的建议。 问题是: 用户将看到一个预填充(照片)的sqlite数据库(easy),但他们可以修改默认数据(替换/删除照片)。我想保留主捆绑包上的默认照片,而不将任何内容复制到应用程序目录,但显然,如果用户决定编辑/替换照片,我无法向主捆绑包写入任何内容 我不希望将照片保存在sqlite中,也不希望将默认照片复制到应用程序目录中(因为苹果不希望添加用户未添加到应用程序目录中的任何内容)。 问题是: 如何从主捆绑中调用默认照片,但从应用程序目录调

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

我不希望将照片保存在sqlite中,也不希望将默认照片复制到应用程序目录中(因为苹果不希望添加用户未添加到应用程序目录中的任何内容)。 问题是: 如何从主捆绑中调用默认照片,但从应用程序目录调用已编辑/替换的照片

任何想法都将不胜感激

比如:

if (userEditedPhoto) {

imageView.image = //appDirectory:userPhoto

}

else {

imageView.image = //mainBundle:defaultPhoto

}

感谢核心数据方面的支持,它非常简单:

  • 创建包含在应用程序包中的基于核心数据的SQLite文件
  • 启动时,创建一个位于文档目录中的新的
    NSPersistentStore
  • 将这两个存储添加到
    NSPersistentStoreCoordinator
  • 核心数据将把它们当作一个单独的存储,您可以从这两个存储中读取数据,也可以向其中写入数据。复制正在编辑的图像非常简单,所以除非您有疑问,否则我不会详细介绍

    更新
    核心数据不是数据库,而是对象存储。该对象存储可以使用磁盘上任意多个单独的文件。我上面的建议是在磁盘上有两个文件,从两个文件中读取,只向一个文件写入。从而为您提供预取的数据。

    可能重复的@HalMueller不重复。请阅读问题…@Marcus我认为创建两个映像模型(一个是瞬态的,一个是持久的),其中瞬态模型将在运行时从应用程序包中动态加载。通过这种方式,图像可以进入应用程序资源包,他可以为两者使用一个单一的核心数据图(同时保持逻辑分离)。除非我遗漏了什么。但是,如果我从一个图像读取,然后向另一个图像写入,如果用户决定替换预加载的图像,它将如何区分编辑/替换的图像?它总是从预加载的…@GeorgeAsda中读取,这是一个编码问题,我相信您可以解决。您可以在实体中放置一个state属性来区分。您可以跟踪
    NSPersistentStore
    。我相信你会想到很多其他的方法。@smyrgl如果它是从应用程序包加载的,它不是暂时的。通过将应用程序捆绑商店标记为只读,写操作将始终转到OP想要的其他商店。我认为这太复杂了,甚至无法尝试。我要做的是:将数据库安装到documents目录(从主包读取)。如果/当用户决定编辑数据库时,将所有内容复制到documents目录,并从那里开始读取和写入documents目录。苹果公司已经严重破产了我们不允许将大文件写入文档目录。