2014-01-12 41 views
2

我正在嘗試將其他屬性和方法添加到實體類,我想從自動生成的NSManagedObject子類中去耦。將方法和屬性添加到CoreData實體的正確方法是什麼?子類他們?

由Core Data自動生成的類定義文件非常有幫助,我喜歡能夠更改數據方案並快速重新生成它們,而不必擔心刪除我的擴展,所以子類化感覺像是正確的整體方法。

但是當我這樣做(例如,Person子類,稱爲MyPerson) - 這似乎功能,但使用像MagicalRecord工具期待的實體名稱相匹配的類名時導致混亂。 (即因爲它沒有發現任何實體,稱爲MyPerson[Person findAll]的作品,但[MyPerson findAll]失敗。)

感覺就像我敲我的頭撞在牆上太多;在這裏追求什麼樣的正確設計模式?謝謝您的幫助。

+2

嘗試[mogenerator](https://github.com/rentzsch/mogenerator) –

回答

2

您可以創建一個類類別你定義額外的方法:

@interface Person (MyMethods) 
- (NSString *)myMethod; 
@end 

這工作得很好,因爲Xcode中不會覆蓋類文件時 重建被管理對象的子類。

唯一的缺點是,你可以 不是一類類別添加實例變量,因此沒有屬性 它們通過實例變量備份。

有一個解決方法:一可在一類類定義一個屬性,並使用 「關聯對象」來存儲它們的值

(使用Objective-C運行方法 objc_setAssociatedObject()objc_getAssociatedObject(),見 https://stackoverflow.com/a/3601133/1187415的一個例子。)

一個替代(正如剛剛在評論中提到的)是使用「mogenerator」。 mogenerator爲每個實體生成兩個類。一個「機器」類(_Person) 當您更改模型時,它總是被覆蓋, 和一個「人類」子類(Person),您可以在其中隨意添加 方法,屬性和實例變量。

+0

謝謝,我以前使用過類別,但爲了我想添加的內容,我真的想要實例變量(和屬性)。感謝mogenerator的提示;將檢查出來。也歡迎任何其他的選擇。 – dctroy

+0

'mogenerator'是解決問題的正確方法。 –

相關問題