【问题标题】:Correct way of dealing with Core Data NSManagedObjects in an iOS application在 iOS 应用程序中处理 Core Data NSManagedObjects 的正确方法
【发布时间】:2013-05-03 08:07:10
【问题描述】:
当我使用涉及数据库和 ORM(对象关系管理器)的 Java 应用程序时,架构通常是分开的,因此在数据库层中使用数据库实体时,您直接使用实体。但是,如果您需要访问 GUI 中的实体,您将创建实体的数据传输对象 (DTO),然后在 GUI 层中使用它。
iOS 应用程序的首选方法是什么?
一个例子是,我从 Core Data 中提取数据以检索 ViewController 中的一些对象,然后在 ViewController 中的 TableView 中显示结果。在显示结果之前是否需要将NSManagedObjects 转换为 DTO?
【问题讨论】:
标签:
objective-c
cocoa-touch
design-patterns
core-data
dto
【解决方案1】:
iOS 应用程序的首选方法是什么?
在显示结果之前是否需要将 NSManagedObjects 转换为 DTO?
不,没有必要。托管对象已经是包装数据库实体的(通用)对象。您可以使用 -valueForKey: 调用访问托管对象的属性(即实体属性)。
但首选方法是继承 NSManagedObject 以适应您的实体。在 Xcode 中有一个选项可以自动生成子类(编辑器-> 生成 NSManagedObject 子类)。这样您就可以为您的实体获得自己的子类对象,并可以使用点符号访问它们的属性。
在获取对象时,只需让结果为该子类的类型即可。
如果你想为你的实体对象添加自定义方法,你应该在你的托管对象子类上创建一个类别。这是因为如果您更改了 db 方案并且必须让 xcode 重新创建您的子类,它会完全覆盖 并且您的自定义方法将会丢失。