如何在CoreData应用程序中使用默认数据初始化商店?

edi*_*die 7 iphone core-data

我正在做一个iPhone应用程序.在这个应用程序中,我只想让一个数据库用作我的应用程序中值的查找表.数据库唯一能做的就是根据程序的查询为我提供所需的值.它不会在数据库中添加或删除任何内容.我的问题是如何使用CoreData初始化应用程序上的默认数据.因此,当程序启动时,它已经拥有了所需的所有值.

如果您对其他更好的做法或其他选择有其他建议,请告诉我.

谢谢.

Bra*_*son 12

我将创建一个简单的Mac应用程序,从基于Core Data文档的应用程序的模板开始.将现有的.xcdatamodel复制到项目中的默认值(或添加新数据模型,并确保重命名引用默认模型的任何位置).在Interface Builder中打开文档窗口的XIB文件,然后从Interface Builder库检查器中将Core Data Entity项目拖入其中.从结果对话框中,选择要显示的实体,然后选择要在其中显示的实体.

这将做的是创建一个功能齐全的界面,用于添加,删除或编辑该实体类型的属性.一切都应该通过Cocoa Bindings连接起来,这样你就不需要编写一行代码就可以了.您可以通过这种方式为模型中的每个实体类型添加接口.

这样您就可以在Core Data文档中快速输入和编辑数据,然后可以将其保存到磁盘并作为资源添加到iPhone应用程序中.SQLite数据库结构在桌面和iPhone核心数据实现之间完全兼容,因此我发现这是一种测试iPhone核心数据代码的快速简便方法.


fly*_*pig 8

请参阅核心数据编程指南,或参见下文(从PG复制):

"如何使用默认数据初始化商店?

这里有两个问题:创建数据,确保数据只导入一次.有几种方法可以创建数据.

  • 您可以创建包含默认数据的单独持久性存储,并将该存储包括为应用程序资源.如果要使用它,则必须将整个存储复制到合适的位置,或将对象从默认存储复制到现有存储.对于小型数据集,您可以直接在代码中创建托管对象.

  • 您可以创建属性列表或其他一些基于文件的数据表示,并将其存储为应用程序资源.如果要使用它,则必须打开文件并解析表示以创建托管对象.

您不应该在iOS上使用此技术,并且仅在Mac OS X上绝对必要时使用此技术.解析文件以创建商店会产生不必要的开销.最好离线创建Core Data存储并直接在应用程序中使用它.还有几种方法可以确保只导入一次默认值:

  • 如果您使用iOS或为Mac OS X创建非基于文档的应用程序,则可以添加应用程序启动检查,以确定您为应用程序商店指定的位置是否存在文件.如果没有,则需要导入数据.有关基于iOS的示例,请参阅CoreDataBooks.

  • 如果使用NSPersistentDocument创建基于文档的应用程序,则初始化initWithType中的默认值:error:.

  • 如果可能创建了商店(因此文件)但未导入数据,则可以向商店添加元数据标志.您可以比执行提取更有效地检查元数据(使用metadataForPersistentStoreWithURL:error :)(并且它不需要您对任何默认数据值进行硬编码).

"

如上所述,通常我们需要使用代码创建预先填充的默认存储,然后将其用作资源文件,如果缺少coredata文件,则将其从资源包复制到文档目录.请在Xcode Organizer(或Apple Developer Center)中搜索CoreDataBooks代码示例,并查看 - (NSPersistentStoreCoordinator*)persistentStoreCoordinator方法.


Lou*_*arg 0

我会编写一个工具,用您想要的数据填充数据库,在构建时生成数据库并将其填充到您的资源文件夹中。如果您不打算写入它,您可以将其留在那里并直接访问它,如果您确实想写入它,则需要将其复制到允许写入的位置(例如文档文件夹)。