我的类应该转换为核心数据管理对象,还是核心数据管理对象

时间:2013-08-04 17:34:45

标签: iphone ios objective-c core-data ios6

我不确定哪一项是最佳做法,但这似乎是一种非常常见的情况。我有一堆类,所以这里有一个简化的情况:我有一个名为Recorder的类来记录音频。它包含一系列设置,用于记录要记录的卷,要记录的文件等。

我想用核心数据保存它。

1)我应该将其作为托管对象吗?或者我应该编写一个单独的托管对象,并将getManagedObjectinitWithManagedObject之类的方法添加到Recorder,以便来回翻译。

2)或者我应该将Recorder作为托管对象。

请记住,我将Recorder子类化为AudioRecorder,因此核心数据模型必须镜像该层次结构。

2 个答案:

答案 0 :(得分:2)

我想说两种解决方案都很好。

如果您只想将Recorder对象保存到持久性存储中(例如,当您的应用程序被杀死时可以重新获取它),第一个解决方案很棒,但是您将拥有两个类:Recorder和RecorderCoreData。

如果您认为使用这两个类维护代码太复杂,那么将Recorder类转换为托管对象。你唯一应该注意的是因为AudioRecorder是Recorder的子类,所以AudioRecorder也必须是一个托管对象!

但是没有完美的答案,只需根据您的需要选择一个看起来简单易用的答案。

我希望它会对你有所帮助。

答案 1 :(得分:1)

对Recorder对象使用NSManagedObject

这样做真的没有任何不利因素。但是,您应该注意的一个设计警告是,您通常不应该直接向托管对象类添加自定义方法,否则当您通过&#34更新托管对象时,很容易意外覆盖这些更改;创建NSManaged Subclass"在数据模型编辑器中。相反,您可以使用类扩展。

如果您发现需要大量辅助方法或自定义属性 - 这两种方法都不适合类扩展 - 那么您应该考虑创建一个代理或管理器对象来与您的记录器进行交互管理对象。