iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了objective-c – NSManagedObject子类生成的CoreDataProperties.m文件实际上并不需要?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

当生成NsmanagedObject子类时, xcode会创建两个额外的文件MyObject CoreDataProperties.h& MyObject CoreDataProperties.m使CoreData远离我们自己的代码. 这很不错,但我在WWDC剪辑中注意到他们的示例中没有CoreDataProperties.m文件.所以我尝试在我的代码中删除这些,并且所有内容都编译并在没有它们的情
生成NsmanagedObject子类时,xcode会创建两个额外的@L_15_2@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.即关于价值变化的内务管理.在这种情况下,有一个可以编辑的存根实现是很有用的.但对于标准行为,没有必要.

大佬总结

以上是大佬教程为你收集整理的objective-c – NSManagedObject子类生成的CoreDataProperties.m文件实际上并不需要?全部内容,希望文章能够帮你解决objective-c – NSManagedObject子类生成的CoreDataProperties.m文件实际上并不需要?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。