2011-05-19 87 views
5

我對Core Data是否爲setPrimitiveAttributeName :,與setPrimitiveValue:forKey:形式的NSManagedObject子類生成原始訪問器有點困惑,它似乎一致地執行。核心數據原始訪問器

我的困惑之源是我使用建模工具(XCode 4)爲我的兩個實體生成NSManagedSubclasses,據我所知,它們共享相同的元數據設置,但是一個子類可以識別setPrimitiveAttributeName形式,而另一個不(它給了我一個「未找到方法」的編譯器警告)。

那麼,期待是什麼?如果我打開一個新項目,創建一個具有一個屬性的實體,並使用建模工具生成必要的NSManagedObject子類代碼,我希望它能自動生成更高效的原始訪問器形式嗎?

回答

2

我一直在遇到類似的問題。雖然運行時generates the primitive accessors,Xcode 4不會生成原語的聲明屬性,但您必須自己在子類中,每個文檔中執行此操作。

我個人爲每個實體創建一個類別,並且始終將自定義代碼放在那裏,這樣我就可以隨時重新生成MO並且不必複製和粘貼。

您可以在一個類別爲此,該接口具有這樣的:

@property (nonatomic, retain) NSDate * primitiveLastUsed; 

而且實現了這一點:

@dynamic primitiveLastUsed; 

非常漂亮,使再生在Xcode的MO無痛。

+0

下面是鏈接文檔中最相關的一點:「核心數據爲您自動生成訪問器方法(和原始訪問器方法)....但是您確實需要聲明訪問器方法或使用Objective-C屬性來抑制編譯器警告「。 – 2014-02-16 13:28:48

+0

作爲一個側面說明,而不是創建自己的類別,我在這種情況下所做的是使用http://rentzsch.github.io/mogenerator/。 mogenerator根據模型自動生成一個基類。然後你在一個子類中擴展它。生成的基類比庫存Xcode類更全面。只有一個例子是頭文件自動包含所有基本訪問器的聲明(如本問題所討論的)。但這也意味着,只要更改模型而不影響自定義代碼,就可以重新生成這些基類。 – 2014-02-16 13:33:54

+0

是的,這是一個很棒的工具,我的解決方案適用於那些不需要幫助工具而需要這種行爲的人。感謝您鏈接此! – logancautrell 2014-03-12 17:13:24