我已经阅读了很多关于NSManagedObject,Apple文档以及更多内容的SO问题,但我仍然没有真正得到NSManagedObject的子类 - 它起什么作用?
在Apple文档中它讨论了我怎么不能覆盖一堆方法,不应该使用自定义实例变量,等等和blah(我还不了解其中的一些),等等 - 所以什么我可以用NSManagedObject吗?有哪些限制,必须遵循的指导方针,以及哪些不是限制?
我正在尝试制作一个小盒子绘图程序来学习Core Data,我正在考虑将“draw”方法添加到NSManagedObject的子类中,以便视图可以告诉他们为自己绘制 - 这是允许?
所以,我的一句话中的问题是,子类化NSManagedObject和任何其他类之间的“真正”区别是什么 - 核心数据用它做什么?
如果这太宽泛,我会尝试缩小我的问题或者其他事情。
答案 0 :(得分:25)
我仍然没有真正得到NSManagedObject的子类 - 它起什么作用?
开发人员的便利性 - 在CodeSense,更短的语法和一些编译时检查方面,有助于防止密钥拼写错误。
那么NSManagedObject怎么办?有哪些限制,必须遵循的指导方针,以及哪些不是限制?
Xcode中内置的UI将为您创建NSManagedObject子类 - 您实际上不需要手动执行它 - 但是,基本上,它们只是NSManagedObject
并且具有一些属性。不使用@synthesize
或类似的,你使用@dynamic
而Apple会为你处理其余的事情 - 将这些属性连接到getter / setter,模仿你通常使用“bare”{{ 1}}。
我正在尝试制作一个小盒子绘图程序来学习Core Data,我正在考虑将“draw”方法添加到NSManagedObject的子类中,以便视图可以告诉他们为自己绘制 - 这是允许?
你可以....但我不会。这听起来像糟糕的设计 - 尝试将模型和控制器分开。
模型对象不应包含业务逻辑/绘图代码。将模型简单地用作应用程序的“状态”。让其他东西对绘图负责。另外,虽然我不能用绝对权威来说这个,但我相信如果您正在处理从NSManagedObject
更新/检索信息的问题,那么会有一些开销。
(基本上,就像处理NSManagedObject
... sorta一样。从字典中获取项目的效率低于访问NSDictionary
的效率。 )
对于执行绘图等操作的应用程序 - 您可能希望通过为内存中的内容构建结构来避免这种开销,并且可能需要第二种类似的持久性/序列化结构(比如CoreData)。 / p>
所以,我的一句话中的问题是,“真正的”区别是什么 在子类化NSManagedObject和任何其他类之间 - 做什么 核心数据用它吗?
我想说 - 不要手工创建NSManagedObject的子类 - 使用Xcode给你的东西。如果你想要更多(除了可能是自定义构造函数),那么你可能正在咆哮错误的树。
修改强>
我认为当我说“根本没有手工创建NSManagedObject”时,我的意思可能会有些混乱
详细说明并纳入其中一个回复:
从Xcode中的数据模型设计器开始,创建模型,并使用以下菜单选项:
然后,您可以修改生成的类以包含自定义:
如果您的用例不适合该列表,您应该认真考虑将其放在其他位置(如使用“Draw”方法的示例)。
上面提到的所有这些内容都可以添加到由Xcode为我们创建的NSManagedObject子类(我们没有“手工创建”) - 它们都围绕着直接处理数据(格式/转换) / etc)和/或将数据从Core Data中拉出(过滤/排序)。
他们不添加iVars,他们不会在数据存储和检索范围之外执行任何复杂的操作。