使用辅助.h .m文件向NSManagedObject添加其他属性

Sle*_*lee 3 objective-c nsmanagedobject

我有一些NSManagedObject类创建用于CoreData我需要添加一些额外的属性来格式化我正在使用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];
}
Run Code Online (Sandbox Code Playgroud)

我目前在生成的NSManagedObject类中有这个,但如果我需要重新生成一个新的NSManagedObject类,这将导致问题.

我可以在辅助类集中定义这些属性 - 类似于C#中的部分属性吗?

lna*_*ger 7

可能最简单的方法是在生成的托管对象中添加一个类别.

是Apple的文档,非常简单.

报价:

您可以通过在类别名称下的接口文件中声明它们并在同名的实现文件中定义它们来向类添加方法.类别名称表示这些方法是在其他地方声明的类的添加,而不是新类.但是,您不能使用类别向类添加其他实例变量.

类别添加的方法成为类类型的一部分.例如,添加到类别中的NSArray类的方法包含在编译器期望NSArray实例在其库中具有的方法中.但是,在子类中添加到NSArray类的方法不包含在NSArray类型中.(这仅适用于静态类型的对象,因为静态类型是编译器知道对象类的唯一方法.)

类别方法可以执行本类中定义的方法可以执行的任何操作.在运行时,没有区别.类添加到类中的方法由所有类的子类继承,就像其他方法一样.

类别接口的声明看起来非常类似于类接口声明 - 除了类名称在类名称后面的括号中列出,并且未提及超类.除非其方法不访问该类的任何实例变量,否则该类别必须为其扩展的类导入接口文件:

    #import "ClassName.h"   

    @interface ClassName ( CategoryName ) 
        // method declarations 
    @end 
Run Code Online (Sandbox Code Playgroud)

请注意,类别不能为类声明其他实例变量; 它只包括方法.但是,类范围内的所有实例变量也在该类别的范围内.这包括类声明的所有实例变量,甚至是声明为@private的实例变量.

您可以添加到类中的类别数量没有限制,但每个类别名称必须不同,并且每个类别都应声明并定义一组不同的方法.