Cocoa 为什么一个子类NSManagedObject会这样?
我已经阅读了许多关于NSManagedObject、Apple文档等的问题,但我仍然不知道子类化NSManagedObject的目的是什么——它扮演了什么角色 在Apple文档中,它谈到了我如何不能覆盖一堆方法,不应该使用自定义实例变量,等等等等(我还不了解其中的一些),那么我可以用NSManagedObject做什么呢?什么是限制,必须遵循指导原则,什么不是限制 我正在尝试制作一个小方框绘图程序来学习核心数据,我正在考虑向NSManagedObject的子类添加“draw”方法,这样视图就可以告诉他们自己绘制-这允许吗 所以,在一句话中,我的问题是,子类化NSManagedObject和任何其他类之间的“真正”区别是什么?核心数据对它有什么作用 如果这太宽泛了,我会尽量缩小我的问题范围 我仍然不知道子类化NSManagedObject的目的是什么——它扮演什么角色 为开发人员带来的便利-在代码感知、更短的语法和一些编译时检查方面,这些检查有助于防止密钥拼写错误 那么我可以用NSManagedObject做什么呢?什么是限制,必须遵循指导原则,什么不是限制 Xcode中内置的UI将为您创建NSManagedObject子类—您真的不需要手动创建—但基本上,它们只是带有一些属性的Cocoa 为什么一个子类NSManagedObject会这样?,cocoa,core-data,nsmanagedobject,Cocoa,Core Data,Nsmanagedobject,我已经阅读了许多关于NSManagedObject、Apple文档等的问题,但我仍然不知道子类化NSManagedObject的目的是什么——它扮演了什么角色 在Apple文档中,它谈到了我如何不能覆盖一堆方法,不应该使用自定义实例变量,等等等等(我还不了解其中的一些),那么我可以用NSManagedObject做什么呢?什么是限制,必须遵循指导原则,什么不是限制 我正在尝试制作一个小方框绘图程序来学习核心数据,我正在考虑向NSManagedObject的子类添加“draw”方法,这样视图就可以
NSManagedObject
s。你不用@synthesis
或类似的工具,而是使用@dynamic
,苹果会为你处理剩下的部分——将这些属性连接到getter/setter,它们模仿你通常使用“裸”NSManagedObject
所做的事情
我正在尝试制作一个小方框绘图程序来学习核心数据,我正在考虑向NSManagedObject的子类添加“draw”方法,这样视图就可以告诉他们自己绘制-这允许吗
你可以。。。。但我不会。这听起来像是糟糕的设计——试着将模型和控制器分开
模型对象不应包含业务逻辑/图形代码。仅将模型用作应用程序的“状态”。让其他人对这幅画负责。另外,虽然我不能绝对权威地这么说,但我相信如果您要从NSManagedObject
更新/检索信息,会有一些开销
(基本上,这就像处理NSDictionary
…排序。从字典中抓取项目比访问ivar
效率低)
对于一个像绘图这样的应用程序,您可能希望通过为内存中的东西创建一个结构,以及为持久性/序列化(比如CoreData)创建第二个类似的结构来避免这种开销
所以,我的一句话的问题是,“真正”的区别是什么
在子类化NSManagedObject和任何其他类之间-什么是
核心数据和它有什么关系
我会说——根本不要手动将NSManagedObject子类化——使用Xcode提供的东西。如果你想要更多的(除了自定义构造函数),那么你可能找错了方向
编辑:
我想,当我说“不要手动将NSManagedObject子类化”时,可能对我的意思有些困惑
要详细说明并纳入其中一个响应:
从Xcode中的数据模型设计器开始,创建模型,并使用以下菜单选项:
然后,您可以修改生成的类以包括自定义:
- 建设者
- 数据转换方法
- 验证
- 格式化
- 排序描述符
- 过滤器
它们不添加IVAR,不执行数据存储和检索范围之外的任何复杂操作 这个答案大部分都是好的,但我不同意“不要手动将NSManagedObject子类化”——我还没有一个最终不会将NSManagedObject子类化的核心数据项目。处理瞬态变量和数据转换是非常常见的。它还提供更好的类型安全性。实际上,为了保持一致性,我几乎总是为每个实体创建一个子类。有些是子类的,有些不是子类的,这会让人感到困惑。我还要补充一点:(1)自定义验证,(2)工厂方法,(3)字符串格式,(4)关联排序描述符和筛选谓词的类方法。@RobNapier-哦,绝对是-我所说的“手工”是“如果您正在创建一个核心数据实体,并且您正在使用它来存储核心数据中的内容,并且Xcode将/可以为您创建实体的开始,那么对于一个子类来说,这是一个合适的位置“-正如我提到的,构造函数绝对是我可以看到添加的东西-数据转换方法以及你提到的都很好-但不要无缘无故地把所有本来是NSObject子类的东西都变成NSManagedObject子类(就像OP关于方框的示例中那样)。我不知道我是否同意任何业务逻辑;让你的模型“更聪明”比让你的控制器乱七八糟更有意义。不过,同意“无视图”的说法。@wkhath-我没有说业务逻辑应该放在您的
UIViewController
s中。典型的场景是三层-UI |业务逻辑|数据访问。