我有一个相当复杂的数据结构,我打算在iPhone/iPad应用程序中使用。在摆脱了许多不需要的表格之后,尽可能地将数据结构扁平化。 - 也就是说,如果我有一个实际结构中的调用表和地址表,因为我根本不需要更新地址信息,所以我扩展了IOS调用表以获取地址信息而不是链接表 - 基本上是de尽可能地减少表格复杂度。对ios上的复杂数据结构的sqlite或coredata
总而言之,我仍然有15张桌子。
我可以很容易地将表脚本编写到SQLlite中,并且可以快速使用IOS中的SQLlite C API并使其工作正常。
我的问题是 - 对于具有大量相关表的故障处理大数据捕获应用程序,我应该坚持使用SQL技能并使用SQLite和C API,还是将其全部转换为coredata?
我与coredata主要的担心是 一)建立时间 - 有从现有的数据库模式创建coredata映射数据(SQL服务器,SQLite的或脚本) B)的方式,如果我有几千行在一个表格中(这是在作业中使用的库存项目清单)。我的理解是,coredata检索该对象的所有项目,然后使用谓词过滤它们。这究竟是如何运作的,还是我误解了?如果它的行为如此有效,这是否有效? c)虽然我尽可能地扁平化了结构,但仍然可能需要我一起加入3或4个表格 - 在核心数据中使用这样的关系是有效的吗?
我没有问题重读coredata书籍,然后应用它,如果它真的是这种情况的更好的解决方案,它只是所有的书籍和我读过的例子是1或2个具有一些属性的实体只有一个关系。我的数据库模式,所以我的coredata数据模型将比这更复杂。 另一个需要考虑的问题是核心数据是否比sqllite提供了使用rest服务或JSON从服务器获取数据并将转换完成细节返回给服务器的优势?
请参阅下面我的经验: 的情况下,任何人读这篇文章,想知道我的经验作为SQL Server/ASP.net家伙....
我开始使用SQLite的,我发现它使用起来既快又简单。该API并不是很好,但作为一个SQL人,这根本没有给我带来任何好处。
我能够从SQL Server脚本表结构容易与小器官功能障碍综合征生成的脚本让我在我的SQLite表结构非常迅速
我在访问asp.net开始了,所以我没有对脚本和创建动态SQL字符串很陌生。然而,我不想再使用这种方法,因为我觉得它已经过时了,所以尽管可能矫枉过正,因为我使用SQLite来检索数据,但我想将数据放入适当的对象中。我想创建我的对象的数组并编辑我的对象的属性。它在目标C中对我更有意义。在asp.net中,我仍然不为数据创建对象,我使用SQL Server存储过程,因为我有一个非常复杂的数据结构,并且想要完全控制我查询的所有内容。
然而,需要AGES创建类来包装你的表。在核心数据中,只需单击一下即可生成表示核心数据实体的类,因此,权衡是花费时间手动生成coredata模式,而不是手动生成类来表示数据表/实体/无论您更喜欢调用它们。
我在这里选择了核心数据。
,你可能会需要使用类别来扩展生成的类,但其实这是很容易,也很冷静,
一个coredata的最大优势是自动显示在表视图变化fetchedresults控制器。因为我的应用程序有2到3个层次结构的表视图 - 在视图2中更改数据,然后返回到tableview,查看1并查看视图1中的更新,而无需手动重新加载数据,这非常酷。
谓词可以。他们具有足够的理性,牢记,无论你提取什么对象,都可以从这个对象中横切关系 - 如果有时候有点混乱,它也很酷 - 这完全是从我觉得的sql思维的倒退方式。一旦你习惯了它,它足够简单并且足够强大。这只是一个位在第一
NSManaged对象(任何对象要存储在核心数据)怪异及其subclasss有自己managedobjectcontext - 即self.managedObjectContext
决策是一件轻而易举的事明确地保存任何变化,即:
[email protected]"james"
[email protected]"blue"
NSError * error;
if ([self.managedObjectContext save:&error]) {
NSLog(@"saved");
}
它比建立sqlite连接,命令和执行它们要干净得多。
核心数据API比SQLite API(很好,它是c)更清洁。
猜想我是一个转换!
我不知道为什么这是-1'd?我很抱歉,但如何阅读2本书300多页专门coredata书页不构成研究?我读到的内容很短,只涉及简单的例子,而不是我想要实现的内容,这更复杂。社区是问问题,他们不是?说我没有试图找到我自己是非常不公平的。如果我能找到一个符合我需求的示范演示或优秀文章,我不会花时间打字问题吗? – 2013-03-15 08:58:38
完全同意你的看法。好问题,我也对这个答复感兴趣。 – 2013-03-17 12:45:12
FMDB(https://github.com/ccgus/fmdb)是一个很好的用于sqlite的Objective-C接口。随着DAO模式,它可以提供非常整洁的代码。如果您需要细粒度的控制,如事务回滚/提交,自定义SQL等,可能是一个不错的选择。 – 2013-12-29 14:37:30