哪个是存储数据的最佳解决方案(coredata或sql)?

时间:2011-12-25 18:44:55

标签: ios sqlite core-data

我正在开发一个测验应用程序。我有100个问题。例如,哪个城市是英国的首都?

一个。罗马

B中。米兰

℃。伦敦

d。奥斯陆

哪种方法可以存储数据(coredata或sql)?

3 个答案:

答案 0 :(得分:3)

核心数据设置比SQL要复杂一些,但是在我看来,核心数据更容易使用,并且让你处于“客观地”,因为SQL需要编写大量的SQL语句(如据我所知)。

具体到您的用例,我认为CoreData会更合适。您可能会有一个Question对象,其中包含实际问题的NSString文本属性,然后是一个NSArray的Answer对象。在CoreData / SQL中,您将有一个带有文本列的问题表。每个问题与Answer对象表有一个多对多的关系(CoreData处理关系的脏工作,但在SQL中你使用主键)。

正如我在下面的另一个答案的评论中所说,因为您的数据库最初并不是非常庞大和复杂,您可以打包一个plist或从服务器下载一个以初始填充CoreData数据库。使用CoreData而不是plist意味着可以更容易地动态更新值,因此您可以执行诸如在每个答案对象上具有属性的事情,如果用户选择该答案,则可以设置该属性,以便在启动之间保存状态。 p>

查看Core Data vs SQLite 3和许多其他堆栈溢出答案,讨论几种不同方法的优缺点。

答案 1 :(得分:1)

对于只有100个条目的简单问题/答案数据库,我会使用纯文本文件。

创建,编辑和阅读非常简单。如果您想要Android或其他版本的应用程序,它是跨平台的。

您可以使用XML,JSON或plist(如上所述),但为什么要这么麻烦?只是问题和答案之间的交替。使用[NSString stringWithContentsOfFile]读入文件,并使用[myFileContentString componentsSeparatedByString:@“\ n”]将行拆分为数组。

NSError *error = nil;
NSArray *testArray = [[NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error] componentsSeparatedByString:@"\n"];

这是1-2行代码,没有学习曲线。数组中的奇数条目将是问题,偶数条目将是答案。

(读取一个plist只需要一行代码,这很好,但是如果你分支出来的话,他们就很难手工编辑并且在其他平台上阅读起来并不容易)

答案 2 :(得分:0)

您还可以考虑将.plist文件与数组一起使用。您的数据并不复杂(根据我的理解),并且plist可以通过http轻松进行外部维护/读取和更新。