Macos 如何以可在绑定中访问的可重用方式修改NSManagedObject类的行为?

Macos 如何以可在绑定中访问的可重用方式修改NSManagedObject类的行为?,macos,core-data,interface-builder,cocoa-bindings,Macos,Core Data,Interface Builder,Cocoa Bindings,Xcode自动为您的NSMO实体生成类实现-太好了 但是我们经常需要定制它们。如果您忘记定制了这些文件,Xcode会很高兴地删除覆盖并删除所有代码 所以。。。一个经典的技巧是: 在Apple的模型视图中创建NSManagedObject 生成类 创建使用类别扩展原始类的新类,添加修改的行为 导入自定义类别标头而不是基本NSMO标头,从而获得新的行为 这非常有用:将自定义代码放在这个类别中,当您使用Xcode自动生成文件时,您永远不会丢失任何东西 但是。。。现在我正在使用Bindings/maco

Xcode自动为您的NSMO实体生成类实现-太好了

但是我们经常需要定制它们。如果您忘记定制了这些文件,Xcode会很高兴地删除覆盖并删除所有代码

所以。。。一个经典的技巧是:

在Apple的模型视图中创建NSManagedObject 生成类 创建使用类别扩展原始类的新类,添加修改的行为 导入自定义类别标头而不是基本NSMO标头,从而获得新的行为 这非常有用:将自定义代码放在这个类别中,当您使用Xcode自动生成文件时,您永远不会丢失任何东西

但是。。。现在我正在使用Bindings/macos代码,绑定非常好,但是我不知道如何使绑定导入带有类别的派生头,以及修改的方法/自定义行为

e、 g.如果我有一个非常常见的ArrayController,它保存着NSMO实例,您通常会告诉它实体名称,例如MyCoreDataEntity,它会使用该类名请求NSMO。但这永远不会加载类别,因此它永远不会获取类的自定义版本

你怎么避开这个?或者:如何加载类别版本的类


或者:如何在不使用类别的情况下编写自定义代码并避免Xcode在需要时删除所有代码?

我必须承认,因为我使用的是cocoa touch,所以没有可用的绑定-因此我真的不知道我的建议是否适用于您的情况

然而,也许这有帮助

我知道,有一种替代类别的方法可以添加核心数据,而不是像类别那样复杂

可以使用以下语句:

有两种选择:

创建一个新的类文件,删除include header.h,删除header.h,将额外的代码放在那里。它编译但带来了两个警告:可以理解[WARN]警告:没有规则处理架构armv6文本类型的文件“$PROJECT\u DIR/Classes/./included\u dataStuff”[WARN]警告:没有规则处理架构armv7文本类型的文件“$PROJECT\u DIR/Classes/./included\u dataStuff”

创建一个新的空文件并将额外的代码放在那里。这不会产生任何警告

1和2之间的区别在于,当代码格式保留在第一个选项中时,必须在第二个选项中接受2个警告,所有代码格式都将丢失,并将其视为正常文本,但没有警告


我想我更喜欢第一个。当然,对生成的代码文件的唯一修改是include语句。

最简单的解决方案是将NSArrayController子类化,导入该类别,然后在IB中使用该子类。这样,您的绑定应该自动知道该类别


MoGenerator过去擅长生成自定义类,而无需覆盖任何内容。我正在为Xcode 4.x修改它或类似的东西,因为最初的作者似乎没有时间这么做

那是个狡猾的好主意。Re:Xcode4-我猜苹果最终会增加像样的CoreData支持。。。他们已经删除了Xcode3的一些核心功能,并且没有提供替代品,这对我来说意味着他们已经有了更好的计划。可能需要一段时间…所以。。。每次重新生成代码时,必须记住手动编辑代码并包含包含自定义代码的文件?是的,到目前为止我就是这样做的。然而,我正在研究预操作或任何其他方法,以便在编译开始之前添加我自己的小预处理。这样我可以节省大量的工作,因为可以添加更多的自动化任务。您是否知道,在xCode4中使用pre操作是否可以实现这一点?