我创建了一些用于CoreData的NSManagedObject类我需要为使用GRMustache模板的格式添加一些额外的属性。
以下是一个示例属性:
-(NSString *) PriceFormatted {
NSNumberFormatter *nfm = [[[NSNumberFormatter alloc] init] autorelease];
[nfm setNumberStyle:NSNumberFormatterCurrencyStyle];
[nfm setCurrencyCode:[Helpers GetCurrencyCode]];
[nfm setNegativeFormat:@"-¤#,##0.00"];
[nfm setMaximumFractionDigits:2];
return [nfm stringFromNumber:self.Price];
}
我目前在生成的NSManagedObject类中有这个,但如果我需要重新生成一个新的NSManagedObject类,这将导致问题。
我可以在第二组类中定义这些属性 - 类似于C#中的部分?
答案 0 :(得分:7)
最简单的方法可能是在生成的托管对象中添加一个类别。
Here是关于它的Apple文档,非常简单。
引用:
您可以通过在接口文件中声明方法来向类添加方法 在类别名称下并在实现文件中定义它们 同名的。类别名称表示方法是 添加到其他地方声明的类,而不是新类。你不能, 但是,使用类别向a添加其他实例变量 类。
类别添加的方法成为类类型的一部分。对于 例如,包括添加到类别中的NSArray类的方法 作为编译器期望NSArray实例具有的方法 剧目。但是,在子类中添加到NSArray类的方法 不包含在NSArray类型中。 (这只适用于 静态类型对象因为静态类型是唯一的方法 编译器可以知道对象的类。)
类别方法可以执行类中定义的方法 适当的可以做。在运行时,没有区别。方法了 类添加到类中的所有类都继承 子类,就像其他方法一样。
类别界面的声明看起来非常像一个类 接口声明 - 除了类别名称之外 没有提到类名和超类之后的括号。 除非它的方法不访问类的任何实例变量, 该类别必须导入其扩展的类的接口文件:
#import "ClassName.h"
@interface ClassName ( CategoryName )
// method declarations
@end
请注意,某个类别无法声明其他内容 类的实例变量;它只包括方法。然而, 类范围内的所有实例变量也在其中 该类别的范围。这包括所有实例变量 由类声明,甚至声明@private。
您可以添加到的类别数量没有限制 class,但每个类别名称必须不同,每个都应该 声明并定义一组不同的方法。
答案 1 :(得分:2)
这是CoreData的常见问题。查看https://github.com/rentzsch/mogenerator,您可以通过https://github.com/mxcl/homebrew安装。
Mogenerator将生成两个类:一个包含数据模型的属性,每次更新数据模型时都会重新创建。而另一个,对于你自己的方法和类别,将保留。 GRMustache类别的完美容器。
顺便说一下,您可以检查GRMustache的格式化功能,它们也可以帮助您:https://github.com/groue/GRMustache/blob/master/Guides/NSFormatter.md