2012-03-28 64 views
3

我創建用於與CoreData一些NSManagedObject類,我需要添加一些額外的屬性格式化我使用GRMustache模板做的事情。到NSManagedObject添加附加屬性與二次.H .m文件

下面是一個例子屬性:

-(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#中的部分嗎?

回答

7

可能最簡單的方法是將一個類別添加到生成的託管對象中。

Here是它Apple的文檔,這是很容易的。

報價:

您可以通過下方的類別名稱的接口文件 宣佈他們以相同的名稱定義它們在實現文件 方法添加到一個類。類別名稱表示這些方法是添加到其他地方聲明的類中的,而不是新的類。但是,您不能使用一個類別將其他實例變量添加到 類中。

類別添加的方法成爲類類型的一部分。對於 例如,加入到NSArray類類別中的方法包括 爲方法編譯器期望一個NSArray實例以在其 劇目。在子類中添加到NSArray類中的方法,但是, 不包含在NSArray類型中。 (這一點很重要僅供 靜態類型的對象,因爲靜態類型是 編譯器能夠知道對象的類的唯一方式。)

分類方法可以做任何事情,適當的類 定義的方法可以做到。在運行時,沒有區別。與其他方法一樣, 類別添加到類中的方法由所有類的 子類繼承。

類別界面的聲明看起來非常類似於類 接口聲明 - 除類別名稱在類名和超類未提及之後在 括號內列出。 除非它的方法不訪問任何類的實例變量, 類別必須導入接口文件它擴展了類:

#import "ClassName.h" 

    @interface ClassName (CategoryName) 
     // method declarations 
    @end 

注意,一類不能宣佈額外 類的實例變量;它只包含方法。但是, 範圍內的所有實例變量也在 範圍內。這包括由類聲明的所有實例變量 ,即使是聲明瞭@private的實例變量。

您可以添加到 類的類別數量沒有限制,但每個類別名稱必須不同,並且每個類別都應聲明並定義一組不同的方法。

2

這是CoreData的常見問題。請檢查,您可以通過https://github.com/mxcl/homebrew進行安裝。

Mogenerator將生成兩個類:一個包含數據模型的屬性,每次更新數據模型時都會重新創建它們。另一個,爲你自己的方法和類別,將保持。 GRMustache類別的完美容器。

順便說一下,你可以檢查GRMustache的格式化功能,它們也可以幫助你:https://github.com/groue/GRMustache/blob/master/Guides/NSFormatter.md