2011-11-16 146 views
1

我正在编写一个应用程序,其中包含校园和桌面视图中的所有建筑物。当您点击建筑物时,它将检索其中的信息,例如经度,纬度,建筑物名称及其图像。iPhone应用程序的数据存储

我的问题是你认为最好的方式来存储这些数据?我应该使用sqlite3数据库还是核心数据? Sqlite3是我现在所倾向的东西,我对SQL有些熟悉。任何建议,将不胜感激。

回答

5

CoreData使用SQlite。如果你正在学习,那将是你最好的选择,因为所有苹果相关的东西(iphone,ipad,ipod touch和MacOS X都支持它)。

有很多关于如何使用CoreData的书籍和例子。另外,CoreData可以以更好的方式处理更新。

要使用CoreData,您不需要编写任何SQL行。它的全部由API完成。

+4

我会更强烈地说;除非您非常需要可移植到非Apple平台*或*您真的*真的*想要学习SQL,与Core Data相比,SQLite是浪费时间。 – bbum

+0

好的谢谢,我会更多地考虑它。我倾向于sqlite3,因为我可以编写一个perl脚本,将每个建筑物的所有信息放在一张表中。我不确定这对于CoreData来说是否容易。我已经搞混了CoreData,它使用起来非常简单和友好。 – ericlvb

+0

您可以为CoreData编写导入例程,但通常应该在您的应用程序中执行。不建议直接访问底层CoreData的SQlite数据库。 – tobyc

-2

好的,所以我想出了一个很好的方法来使用核心数据来做到这一点。我用一个实体及其属性创建了核心数据模型。实体及其属性对应于一个表及其列。我运行它,它创建了一个空的sqlite文件。你可以找到这个文件:

/Users/[用户名] /资源库/应用程序支持/ iPhone模拟器/ 5.0 /应用/ [一些长期的十六进制数] /文件

从那里,你可以打开并查看sqlite文件及其内容:

> sqlite3 [name of file].sqlite 
> .schema 

.schema显示表格和列。您会注意到,当Core Data创建一个sqlite数据库时,它将调用表Z [entity]和列Z [attribute],其中entity是您实体的名称,attribute是您的属性的名称。所以表格和所有属性在它之前有一个Z.

然后,我写了一个脚本来收集所有的信息,并将其存储在这个数据库中,然后我把它放回到我发现它的目录中,它工作正常!希望这能帮助遇到同样问题的人。

我绝对建议使用核心数据而不是SQLite,核心数据更容易使用。

UPDATE:我应该提到,我用它来初始化一个数据库,并且在初始化后不做任何改变。

+0

请不要这样做。访问底层的Core Data数据库是一个可怕的想法。 Apple可以随时更改实际实施,并且您的应用将失败。只需使用实际的核心数据方法来创建您的数据。 – sosborn

+0

这对于调试很好,也许可以初始化一些标准数据,但是你不应该依赖它。 –

+0

就我而言,我需要初始化一个包含230个建筑物数据的表格,每个建筑物具有不同的属性。之后数据库中没有任何变化,所以我看不出有什么问题。 Apple如何期望您自动化存储海量数据的过程,而无需直接访问底层数据库并使用Core Data? – ericlvb

相关问题