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

时间:2012-03-28 01:55:04

标签: objective-c nsmanagedobject

我创建了一些用于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#中的部分?

2 个答案:

答案 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