Iphone 针对有SQL经验的开发人员的核心数据与SQLite
我们开始在iPhone企业开发者计划中开发内部应用程序。由于它接近OS3.0,我们正在重新考虑使用SQLite和使用核心数据的原始设计。以下是更多信息:Iphone 针对有SQL经验的开发人员的核心数据与SQLite,iphone,sqlite,core-data,Iphone,Sqlite,Core Data,我们开始在iPhone企业开发者计划中开发内部应用程序。由于它接近OS3.0,我们正在重新考虑使用SQLite和使用核心数据的原始设计。以下是更多信息: 这将替换一个旧的桌面应用程序。我们将重用现有的后端 我们目前有一个SQLite数据库作为概念证明生成。这基本上是现有后端数据库的精简版本 我们将从一个远程站点加载数据并将其存储在本地,数据将在本地保存并需要保存。我们只会在它发生变化时更新它,每一两个月更新一次。我们最有可能使用XML或JSON来传输数据 这个项目有两个开发人员,我们都有很强的
- 这将替换一个旧的桌面应用程序。我们将重用现有的后端
- 我们目前有一个SQLite数据库作为概念证明生成。这基本上是现有后端数据库的精简版本
- 我们将从一个远程站点加载数据并将其存储在本地,数据将在本地保存并需要保存。我们只会在它发生变化时更新它,每一两个月更新一次。我们最有可能使用XML或JSON来传输数据
- 这个项目有两个开发人员,我们都有很强的SQL技能,但都没有使用过核心数据
- 如果我必须检查某个特定项是否存在或是否有更新(使用SQL很容易),那么核心数据仍然有意义吗?我可以在不加载整个图形的情况下加载图形中的第一个对象并检查版本号吗
- 如果我们已经知道SQL,那么这一项目的核心数据优势是否证明我们学习SQL是合理的
我相信其他的回答者也能想出其他的优势,也许还有一些很好的理由来解释为什么不去搅乱核心数据。顺便说一句,在类似的情况下,我的决定是移植到更高级别、更新的框架。但在我的例子中,这是一个附带项目,发货日期和预算是非因素。不要贬低这个论坛,但你可能会在苹果iPhone DevForum上找到更多有相关背景经验的受访者 从纯项目管理的角度来说,听起来您知道如何使用SQLite构建您想要构建的内容,因此我认为您从这条路线开始会更有意义 这就是说,CoreData构建在SQLite之上,如果您试图结合数据利用系统的其他部分,例如使用KVC/KVO或绑定,那么您可能会很快发现此功能值得学习 =Mike正如您所读到的,您知道核心数据和持久化机制(本例中为SQLite)在很大程度上是正交的。核心数据实际上是关于管理对象图的,它的主要用例是MVC体系结构的模型组件。如果您的应用程序非常适合这种体系结构,那么使用核心数据可能是值得的,因为它将在模型组件中为您节省大量代码。如果您已经有了一个工作模型组件(例如,从现有的桌面应用程序),那么核心数据不会给您带来太多好处。一种混合方法是可能的——您可以自己进行持久化/查询,并构建一个核心内存中数据存储,使用查询结果填充该存储,并通过核心数据将该内存中存储用作应用程序的模型组件。这并不常见,但我已经做到了,并且没有重大障碍 要回答您的具体问题:
+[NSPersistentStore metadataForPersistentStoreWithURL:error://code>检索该信息,而无需打开存储。当然,还存在一个等价的+setMetadata:forPersistentStoreWithURL:error
。如果要将版本信息存储在实体实例中而不是持久存储元数据中,则只能加载单个对象。使用SQLite持久存储,核心数据可以很好地只获取您需要的内容
NSPredicate
API非常容易学习,它似乎可以很好地编译SQL。根据我的经验,至少对于iPhone上可以容纳的大小的数据库来说,这是足够的(性能方面)。然而,我认为SQL与核心数据的问题有点误导。一旦你得到一个查询的结果,你将如何处理它?如果您使用自己的,您将必须实例化对象,处理错误/唯一化(如果您不想loa)