我刚刚开始使用CoreData制作应用程序,但我熟悉MVC概念,因为我曾经在使用(和开发)MVC框架进行Web开发方面做了很多工作.
根据我收集的内容,CoreData自动生成从NSManagedObject继承的类.通过对上下文的获取请求或通过向上下文中插入新对象来创建对象.在我看过的应用程序中,除了与数据库中的属性相对应的属性外,对象是空的,基本上使它们成为模仿实体表中一行的对象.
有意义的是,那些自动生成的类和CoreData本身构成了应用程序模型.在传统上我做的应用程序中,有一个Model类负责处理所有数据.这通常是Singleton类,每个需要该模型的控制器都可以简单地使用self.model = [Model sharedInstance] ;.对于更大的应用程序,可能有多个模型而不是一个巨大的模型.你得到了照片.我想我的第一个问题是:我是对的吗? CoreData及其关联的NSManagedObject构成了应用程序的整个模型?
我猜这是错误的,因为应用程序可能需要其他功能来处理没有指定CoreData对象的数据.例如:如果CoreData应用程序需要使用来自foo.com/test的HTTP请求(请假设它是JSON数据)检索的数据填充表视图,该怎么办?这些数据不需要存储在CoreData中,但与此同时,我认为检索和解析数据不是控制器的工作.应该有一个对象,FooDataManager(或类似的东西)处理HTTP请求以管理来自foo.com的数据(它可以扩展AFHTTPClient).然后处理foo.com的控制器有fooDataManager的属性,它充当该控制器的模型?然后控制器将调用[self.fooDataManager retrieveAndParseData] ;?
我想在开始开发CoreData应用程序之前验证此信息,以便我从一开始就正确地执行此操作.在Web开发中,我习惯为每个控制器设置一个模型,但在iOS上,似乎可以有许多模型都可以自己创建,许多控制器使用这些模型,所有这些模型都是另外的到CoreData和NSManagedObjects.
最佳答案
From what I gather, CoreData automatically generates classes that
inherit from NSManagedObject.
否.除非您指定给定实体使用您编写的NSManagedObject子类,否则Core Data返回的对象是NSManagedObject的实例.
I guess my first question is: am I right? CoreData and it’s associated
NSManagedObject’s make up the entire model for an application?
这取决于应用程序.如上所述,如果您希望给定实体映射到您提供的NSManagedObject子类,则可以执行此操作.如果您希望数据对象包含的方法不仅仅是实体属性的访问器,那么这将非常有用.例如,您可以实现-compare:方法以便于按特定顺序排序,或者实现从Web服务器检索产品图像的-getCurrentImage方法.此外,您的模型可能包含一个或多个模型控制器类,它们处理诸如获取请求之类的事情,因此程序的其余部分甚至不需要知道模型使用核心数据.
an application may need other functionality that deals with data that
does not have an assigned CoreData object…what if a CoreData
application needs to populate a table view with data that is retrieved
through an HTTP request from foo.com/test
您绝对可以将该功能放在一个单独的类中,并将其视为模型的一部分,我想这可能是一个好主意.很多iOS程序员可能会把它放在一个视图控制器中,因为它似乎很方便,但我同意将它作为模型的一部分是一个更好的计划.