可可 – mogenerator提供哪些功能?

可可 – mogenerator提供哪些功能?,第1张

概述我一直在使用mogenerator一段时间,而在命令行选项上有一个合理的 Getting Started Guide和 Stack Exchange article,我没有找到一个很好的指南,它提供的所有功能。 简而言之,Core Data为您提供什么,超越了哪些类别,mogenerator实际产生什么? (坦白说,我一直在头文件/实现中发现一些令人惊喜的事情,我没有意识到在那里,我决定逐步通过m 我一直在使用mogenerator一段时间,而在命令行选项上有一个合理的 Getting Started Guide和 Stack Exchange article,我没有找到一个很好的指南,它提供的所有功能。
简而言之,Core Data为您提供什么,超越了哪些类别,mogenerator实际产生什么?

(坦白说,我一直在头文件/实现中发现一些令人惊喜的事情,我没有意识到在那里,我决定逐步通过mogenerator模板和代码,并记录我在Stack Exchange Q&A中找到的内容。喜欢看到额外的答案和编辑,但是。)

解决方法 除了两个系统的核心功能之外,mogenerator通过自动实现关于机器头和实现文件中Core Data的一些最佳实践来帮助您。

物业访问者

访问实体属性的方法是mogenerator生成的核心。但是在上面的访问器中实现了一些很好的功能,而且Xcode类生成器为您提供了什么。

标量访问器

Xcode的内置生成器为您提供了“对原始数据类型使用标量属性”的选项。此选项可让您选择使用NSTimeIntervals创建属性,而不是日期类型的NSDates,BOol而不是布尔类型的NSNumbers以及int16_t(或类似的)而不是NSNumbers。

我觉得这很激动,因为大部分时间我更喜欢原始类型,但不适用于比NSTimeInterval更有用的NSDates。所以核心数据给了我选择的对象,在这种情况下,我将不断地取消装箱,并使愚蠢的错误,如if(myBooleanAttribute)(这总是YES,因为myBooleanAttribute是一个NSNumber,而不是一个BOol)。或者我可以有标量,但在这种情况下,我得到NSTimeIntervals,我将永远不得不转换为NSDates。或者我可以手动编辑所有生成的文件,给我所需的NSDates和BOol的组合。

另一方面,mogenerator为您提供了两种选择。例如,您将获得一个myBooleanAttribute getter,它为您提供了一个NSNumber(用于在NSArray中轻松存储)和一个myBooleanAttributeValue getter,为您提供了一个实际的BOol。与整数和浮点数相同。 (mogenerator不生成NSTimeInterval访问器:仅NSDates。)

键入的可变形属性

如果您具有可变换属性,则可以在将指定属性返回/接受的类的属性中设置特定的UserInfo键(attributeValueClassname)。 (它会正确地转发申报类等)我发现这个记录的唯一的地方是在Verious。

相比之下,Xcode代码生成器只能将这些可转换属性作为ID类型键入。

验证声明

虽然mogenerator不会自动生成任何验证方法,但它确实包括正确的签名作为机器h文件中的注释。这似乎在很大程度上是出于历史原因,但它的确意味着,如果你决定在你的人类文件实现中实现它,它很容易复制和粘贴签名。 (我实际上不会取消声明,因为你不应该直接调用验证。)

原始访问者

核心数据已经将这些访问者提供给原始值,但由于某些原因,它们不包含在其Xcode生成的头文件中。将mogenerator包含在其头文件中使得访问原始值更容易。

获取属性

mogenerator将生成获取的属性的访问器。据我所知,无法让Xcode生成器执行此 *** 作。

助手方法

自动NSFetchedResultsController生成

如果您的实体中有许多关系,并且将–template-var frc = true传递给mogenerator,mogenerator将自动生成一种方法来为与父对象相关联的子对象创建提取请求。它甚至自动生成唯一的缓存名称,并将#if TARGET_OS_IPHONE预处理器宏中的所有内容隔离开。

即使这不符合您的特定需求,这也是模板扩展的一个很好的例子。

 fetchMyFetchRequest:moc_

如果你喜欢在模型中定义你的抓取请求,这是比硬编码的字符串更好的方法来检索它们。

-MyEntitySet

mogenerator使用KVC的魔力给你一个NSMutableSet代理到你的关系。

 的entityname

需要为NSFetchRequest或其他Core Data方法提供实体名称?通过使用这种简单的方法返回实体的名称作为Nsstring,很容易避免硬编码的字符串。

 insertInManagedobjectContext:和entityInManagedobjectContext:

避免硬编码实体名称的另一种方法是使用这些帮助方法。

键入的对象ID

每个标题和实现还包括一个MyEntityID类。它们是仅仅是NSManagedobjectID类子类的空接口和实现。此外,每个模型类都有一个名为objectID的辅助方法,它会覆盖NSManagedobject中的标准objectID方法。辅助方法不会将超类的返回值转换为MyEntityID类型。

最终的结果是,如果您意外地从不同的实体交换对象ID,编译器可以捕获您的错误。

对自定义超类进行子类化

其中一个命令行选项是–base-class:它允许您指定所有生成的类将继承的基类。这是非常有用的,无论是这样,您可以有一个基类,您可以在其中定义方便方法(其中,给定Core Data,您可能应该),或者您可以使用现成的Core Data工具包,如SSDataKit(或两者)。

includem

一个简单的小事情,但如果指定了–includem参数,mogenerator将生成一个包含所有模型头文件的头文件。如果您想将所有标题包含在PCH中,或者包含其他标准标题,方便。

Const定义所有属性,关系,获取属性

标头中包含一个结构体的外部声明,它具有为实体中定义的每个属性和关系定义的Nsstring。这允许您定义谓词和其他参数,而不会将实体的名称烘烤到字符串中。例如,

req.predicate = [nspredicate predicateWithFormat:@"(%K == YES) AND (%K <= %@)",MyObject.favorite,MyObject.availableDate,[NSDate date]];

(用于“命名空间”常量的这种类型的结构在his blog上描述为My Mike Ash

const用户信息键/值的定义

类似地,结构体的外部声明在头中定义,其中包含键作为结构体的成员,值作为值。即

NSLog(@"User info for key my key is %@",MyObjectInfo.mykey) //will log "myvalue"

备用模板

关于mogenerator的一个有趣的事情是,在构建mogenerator中,其作者(Wolf Rentzsch)基本上为Xcode生成的xcdatamodel文件构建了一个通用的解析器和模板引擎。所以你不需要使用mogenerator模板。你可以提供一个简单的命令行参数。 GitHub网站上有很多user contributed templates。

实际上,你甚至不必使用Core Data。许多提供的模板允许您根据数据模型生成一系列普通的NSObject模型类。 (所谓的PONSOs:“plain old nsobjects”)。想在Xcode中使用数据建模器,还有一些其他持久化机制? mogenerator可以帮助你。

您甚至不需要生成对象:another interesting submitted template只提供两种不同型号版本的差异。

总结

以上是内存溢出为你收集整理的可可 – mogenerator提供哪些功能?全部内容,希望文章能够帮你解决可可 – mogenerator提供哪些功能?所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1036789.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存