我正在使用幾個Core Data實體生成NSManagedObject子類,並且在生成這些類時我選擇了「對基元數據類型使用標量屬性」選項。正如預期的那樣,整數屬性被聲明爲int16_t
性能和浮點屬性被聲明爲float
特性在生成的接口:當我不爲Core Data標量屬性編寫訪問器方法時會發生什麼?
@interface TeamStats:NSManagedObject
@property (nonatomic) int16_t pointsScored;
@property (nonatomic) float winPercentage;
@end
在這個界面生成的實現,我看到聲明的@dynamic
這些屬性:
@implementation TeamStats
@dynamic pointsScored;
@dynamic winPercentage;
@end
現在,根據Core Data文檔,我需要爲這些標量屬性編寫訪問器方法,因爲Core Data無法爲我生成它們:
您可以將屬性聲明爲標量值,但對於標量值,核心數據不能動態生成訪問器方法 - 您必須提供自己的實現(請參閱 「託管對象訪問器方法」(第44頁))。核心數據自動合成原始訪問器方法(primitiveLength和setPrimitiveLength :),但您需要 聲明它們以禁止編譯器警告。
這一切都合情合理,我可以看到許多SO帖子,詢問如何寫入這些存取方法,並帶有許多很好的答案。
我無法弄清楚的是:我編寫了這段代碼,並在我閱讀過文檔中的這些細節之前開始使用它,所以我從來沒有寫過任何存取方法。我只在我的類實現中有@dynamic聲明。儘管沒有編寫我應該需要的訪問器方法,但代碼看起來工作得很好。我已經創建了NSManagedObject子類的實例。我已發送該類的實例a setPointsScored:
和pointsScored
消息,並將生成的實例保存到其持久性存儲中。一切似乎都奏效。
我在這裏錯過了什麼?是否有默認實現正在生成,儘管核心數據文檔中提到了什麼?是否會出現我當前的代碼無法工作的情況,需要注意?我希望在編碼更多NSManagedObject子類之前瞭解這裏發生了什麼......
呃......我不寫這些......我認爲CoreData實際上負責爲你創建它們嗎? –
它現在確實存在,文檔錯誤 –