2011-05-04 47 views
3

我打算使用核心数据来存储由具有属性的对象组成的静态数据列表(例如object = person,attributes = weight,height等) 。目标C:如何在应用程序启动时将静态数据存储到核心数据

任何建议什么是最好的方法来解决这个问题?我需要使用什么原始文件格式,以及将原始文件中的数据加载到核心数据的最佳方式是什么?

欣赏任何意见,并在此

+0

是否出于安全原因需要对数据进行加密(例如,它是否包含游戏中的作弊或其他...)? – elslooo 2011-05-04 08:26:04

回答

6

如果数据集很大,应该在应用程序包中包含预填充的SQLite存储。

在Xcode中创建一个单独的项目,并导入数据模型和NSManagedObject子类文件(如果有的话)编写代码导入或创建的静态数据,这一切写入持久性存储。

将持久性存储文件复制/添加到发布项目中。在发行项目中,使用[NSBundle pathForResourse:Type]将商店路径设置为应用程序包中商店文件的位置。在持久性商店选项中,将商店标记为readonly

,可以让你设置一个预填充的,只读的核心数据堆栈,这将有效地处理成千上万个对象的为您服务。

6

我建议推出带有初始数据的二进制文件的.plist帮助,并第一次启动它转储到CoreData。

也可以建议你不要使用CoreData,如果你的列表是不可变的。只需阅读应用程序启动时的plist并将其保存在某个AppDelegate的实例var中即可。

更新(以反映评论): 如果是几千条记录 - 你应该把它导入到核心数据,因为这将提高数据retreval的性能。另外 - 我不会建议保留所有的内存。

获取数据到plist中,你可以使用一些其他的编程语言,从数据库中选择的所有数据,并将其导出为XML的plist(有几乎任何编程语言库)。然后通过使用属性列表编辑器,你可以将它导出到二进制plist。

然后根据你需要用数据做什么 - 你可以导入它无论是在背景或只显示进度指示器/条用户在使用主线程的进口。我相信plist会花费几MB。另外 - 尝试对一千条记录进行基准测试,以获得数据导入需要多长时间的近似估计。

+0

感谢您的意见。我可以检查为什么你不会建议使用核心数据?另外,如果我有几千个物体,将它们导入plist的最快方法是什么? – Zhen 2011-05-04 08:46:19

+0

我不会推荐plist作“成千上万条记录”。由于plist必须完全读入内存才能使用,大型plist可以完全扼杀应用程序。预填充的SQLite核心数据持久性存储是更好的选择。 – TechZen 2011-05-04 13:15:36

0

1,你可以在核心数据填补从外部源启动。启动时,从外部源(SQLite数据库或XML文件)读取数据,然后将数据插入核心数据;

2,提供预填充在SQLite数据库。为此我们将让Core Data根据模型为我们创建数据库结构,然后使用实用程序应用程序填充数据库。实用程序应用程序可以是Mac或iPhone应用程序,它使用核心数据通过核心数据API填充数据库,或直接填充SQLite数据库的某种程序。一旦数据库被填充,只需将其包含在应用程序中,并使该应用程序将其用作默认数据库(如果没有数据库已存在)。

希望this tutorial将有所帮助。

相关问题