【问题标题】:add additional properties to NSManagedObject with secondary .h .m files使用辅助 .h .m 文件向 NSManagedObject 添加其他属性
【发布时间】:2012-04-11 14:39:58
【问题描述】:

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

【问题讨论】:

    标签: objective-c nsmanagedobject


    【解决方案1】:

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

    Here 是苹果的文档,很简单。

    引用:

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

    类别添加的方法成为类类型的一部分。为了 例如,添加到类别中的 NSArray 类的方法包括在内 作为方法,编译器期望 NSArray 实例在其 曲目。但是,在子类中添加到 NSArray 类的方法, 不包含在 NSArray 类型中。 (这仅对 静态类型的对象,因为静态类型是唯一的方法 编译器可以知道一个对象的类。)

    类别方法可以做任何在类中定义的方法 适当的可以做。在运行时,没有区别。方法 添加到类的类别被所有类的继承 子类,就像其他方法一样。

    类别接口的声明看起来很像一个类 接口声明——类别名称除外 类名和超类后面的括号没有被提及。 除非它的方法不访问类的任何实例变量, 该类别必须为其扩展的类导入接口文件:

        #import "ClassName.h"   
    
        @interface ClassName ( CategoryName ) 
            // method declarations 
        @end 
    

    请注意,类别不能声明额外的 类的实例变量;它只包括方法。然而, 类范围内的所有实例变量也在 类别的范围。这包括所有实例变量 由类声明,甚至声明为@private。

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

    【讨论】:

      【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-30
        • 2023-03-24
        • 2012-02-19
        相关资源
        最近更新 更多