加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – NSManagedObject子类生成的CoreDataProperties.m

发布时间:2020-12-14 19:20:06 所属栏目:百科 来源:网络整理
导读:当生成NSManagedObject子类时,xcode会创建两个额外的文件MyObject CoreDataProperties.h MyObject CoreDataProperties.m使CoreData远离我们自己的代码. 这很不错,但我在WWDC剪辑中注意到他们的示例中没有CoreDataProperties.m文件.所以我尝试在我的代码中删
当生成NSManagedObject子类时,xcode会创建两个额外的文件MyObject CoreDataProperties.h& MyObject CoreDataProperties.m使CoreData远离我们自己的代码.

这很不错,但我在WWDC剪辑中注意到他们的示例中没有CoreDataProperties.m文件.所以我尝试在我的代码中删除这些,并且所有内容都编译并在没有它们的情况下正常运行,它们似乎根本不需要.

它们是否以某种方式被我忽略了,或者如果没有,那么为什么xcode会产生它们呢?

解决方法

简短的回答:

不,没有必要.

答案很长:

Objective-C是一种动态类型,后期绑定编程语言.在一个简短的形式中,这意味着每个类型的决策都可以在运行时而不是编译时进行,您可以访问一个属性并将消息发送到对象而无需知道其类型(类).

但是,对于Core Data框架而言,您并不需要作为Core Data的用户和您的模型来了解实体类型的托管对象的类型.甚至没有必要为实体类型设置特定类型. (我不经常生成类,如果我这样做,我会手动生成.)因此,与其他编程语言相比,这些生成的类不必为编译器提供类型.

但是,编译器希望至少看到每个方法至少有一次获得签名(参数类型).否则会发出警告.即使有可能像这样的工作代码……

NSManagedObject *person = …
NSString *firstName = [person firstName];

…对于具有属性firstName的实体类型Person,编译器将警告您,他对方法-firstName一无所知.

相反,你可以键入这样的东西:

NSManagedObject *person = …
NSString *firstName = [person valueForKey:@"firstName"];

(编译器知道-valueForKey :,因为这是在NSObject中声明的方法.)

除此之外,您还可以获得诸如代码完成,检查输入错误等优点.但是您不需要使用Xcode的代码生成工具.只需声明这样的类和界面上的属性.可以使用@dynamic动态生成访问器. (我个人几乎从不使用静态代码生成.)

编辑:在评论中添加了讨论结果.

因此,拥有该类别的接口(“.h-file”),编译器知道足够编译整个代码而没有警告.这将在运行时工作,如果有保证 – 或在运行时检查 – 可以分派相应的消息.从Objective-C的最开始,这在许多情况下都是有意义的.即用于转发和非正式协议.在Core Data的上下文中,它用于动态生成标准访问器方法.没有任何实现,一切正常.

但是,出于某些原因,我想要实现,i.即关于价值变化的内务管理.在这种情况下,有一个可以编辑的存根实现是很有用的.但对于标准行为,没有必要.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读