最佳实践:在框架中公开 NSManagedObject
Posted
技术标签:
【中文标题】最佳实践:在框架中公开 NSManagedObject【英文标题】:Best practice: exposing NSManagedObject in framework 【发布时间】:2015-07-21 13:44:01 【问题描述】:我正在 ios 中创建一个包含即时消息功能的库/框架,使用 CoreData(加上 MagicalRecord 和 Mogenerator)来存储消息和对话。
我主要有两个NSManagedObject
类:Message
和Conversation
。例如在Message
中,我有一些创建实体的类方法(比如[Message createMessage]
和一些查询表的实例方法(比如[message getLatestMessages]
)。
我的问题是,在我的框架 Message
和 Conversation
(以及它们的所有公共方法)中公开公开多少是一种好的做法。
我应该采取不同的方法,比如用其他类包装实体吗?
然而,数据库上下文将始终对框架的用户隐藏。
【问题讨论】:
【参考方案1】:不要包装它们,它们已经足够抽象了。只需公开它们,因为它们只是数据对象。
您应该有一个入口点来检索数据和保存数据。暴露给外部应用程序的某种形式的 DataController。
【讨论】:
当NSManagedObject
或其NSManagedObjectContext
被释放时,你如何处理?
处理任何其他被释放对象的方式相同。如果它不应该被释放,那么你就有一个错误。
我的意思是,有没有一种简单的方法可以将 NSManagedObject 的“副本”从其原始上下文中分离出来。让我们想象一个函数getObject
为这个函数创建一个新的 MOC(没有保留它的引用),执行一个查询并返回结果。当 MOC 将被释放时,返回对象的属性将全部等于 nil。除了返回NSDictionary
或创建特定的NSObject
实例之外,是否有一种惯用的方法来防止这种情况发生?
如果对象在存储中,那么任何上下文都可以检索另一个副本,因此您可以建立另一个上下文并将对象提取到该上下文的空间中。您还可以使用 KVC 获取对象中值的字典副本。你想解决什么问题?也许我没有从您的问题中看到更好的方法。以上是关于最佳实践:在框架中公开 NSManagedObject的主要内容,如果未能解决你的问题,请参考以下文章
Swift NSFetchedResultsController 嵌套对象的最佳实践