2011-05-10 102 views
3

感谢您的帮助。如何将数据加载到核心数据?

我试图核心数据添加到我的项目,我被困在哪里以及如何实际数据添加到持久性存储(我假设这是对原始数据的地方)。

我将有1000点<的对象,所以我不希望使用的plist方法。从我的搜索,似乎有xml和csv方法。有没有一种方法可以使用SQL进行输入?

数据将不会被用户更改,数据文件将手动输入,因此我不需要在运行时更新这些文件,并且此时我不受限于任何类型的文件 - 语法上最轻的是首选。

再次感谢您的帮助。

回答

2

你可以从XML/CSV/JSON文件加载数据和应用程序的第一顿午餐(如果数据库不存在,则读取数据,并创建一个)创建数据库。 更好/更快的方法可能是在您的应用程序中运送您的sqllite数据库。您可以在模拟器上以任何您想要的格式解析文件,创建一个包含所有实体的数据库,然后从ApplicationData中取出它,并将其作为资源添加到您的应用程序中。

+0

谢谢。我还没有任何数据,但我对SQL非常熟悉。我认为最好创建一个数据库并按照你的建议发布它,但@vicvicvic建议不然。在这一点上,我没有绑定任何数据格式,所以也许我会看看json。 – Ernest 2011-05-10 02:00:56

+0

请参阅我对@vicvicvic的回答。 – elibud 2011-05-10 02:18:01

1

虽然我敢肯定有可能被用于更轻的文件类型,我将包括一个JSON文件到您从中导入初始数据集的应用程序包。

更新:有些人被推荐XML。 NSXMLParser几乎与JSONKit一样快(但比大多数其他解析器快得多),但XML语法比JSON更重。因此,保存初始数据集的XML捆绑文件比使用JSON时的权重更大。

+0

好的,谢谢。我将研究制作JSON文件涉及的内容。说到导入初始数据集,在此代码中:NSURL * storeUrl = [NSURL fileURLWithPath:[[self applicationDocumentsDirectory] ​​stringByAppendingPathComponent:@“ .sqlite”]]; ? – Ernest 2011-05-10 01:54:17

+0

你有解析器的建议吗?本页底部提供了一个简短列表:http://www.json.org/ – Ernest 2011-05-10 02:15:53

+0

[JSONKit](https://github.com/johnezang/JSONKit)被称为是最快的,但[TouchJSON] (https://github.com/TouchCode/TouchJSON)可能是最广泛的。两者都包含文档,这些文档将向您展示如何将您的json文件解析到NSObjects中,然后保存到CoreData中。 – samvermette 2011-05-10 19:08:34

0

考虑到苹果认为其持久存储实施细节的格式,运送预制SQLite数据库不是一个好主意。即字段和表的名称可能在iOS版本/电话/任何隐藏的变量之间变化你可以想到。一般来说,您应该不关心数据序列化的格式。

有关于苹果的开发者网站导入数据的简短文章:Efficiently Importing Data

你应该船舶的任何格式您满意的初始数据(XML,可以有效地做增量的解析,从而降低内存占用)和编写一个导入例程以便在需要导入数据时运行。核心数据使用的SQLite数据库的格式不是你想要自己生成的东西(它是由你自己生成的SQLite数据库的格式)奇怪,简单地说,仍然不是你应该真的依靠)。

所以,你会想使用模拟器运行的模拟应用,并使用核心数据创建数据库(按EliBud的答案)。但你仍然需要将数据导入模拟应用程序!虽然在“真实”的计算机上执行此操作可能有意义,而不是在移动设备上执行很多次(例如,复制文件非常简单,导入数据很困难),但实际上,您将模拟器用作管理工具。

但是,嘿,如果它工作...

+0

我不打算从在线资源中获取任何数据,并且我有数百个条目要输入,您是否仍然建议XML是最佳选择?从我见过的XML示例中,数据被很多语法所包围,这似乎是不必要的额外工作 - 除非我需要解析? – Ernest 2011-05-10 02:03:59

+0

查看同一文档,在最后一节(FAQ)中,它指出:“有多种方法可以创建数据。 您可以创建一个单独的持久性存储,其中包含默认数据并将该存储包含为应用程序资源。当您想使用它时,您必须将整个商店复制到合适的位置,或将对象从默认商店复制到现有商店。“从那里我读到,可以将数据库作为资源运输,我错过了什么? – elibud 2011-05-10 02:15:26

+0

@EliBud:呵呵,你说得很对......我承认我没有看过那部分,而且感到非常惊讶。所以,我猜...没关系? – vicvicvic 2011-05-10 02:20:14