2010-10-14 19 views
1

我有幾個NSManagedObject的子類。他們都實例化的代碼是這樣的:NSManagedObject子類中看似不一致的行爲

MeasurementDescriptor *descriptor = (MeasurementDescriptor *)[NSEntityDescription 
              insertNewObjectForEntityForName:@"MeasurementDescriptor" 
              inManagedObjectContext:context]; 

或像這樣:

Experiment *experiment = (Experiment *)[NSEntityDescription 
              insertNewObjectForEntityForName:@"Experiment" 
              inManagedObjectContext:context]; 

有什麼奇怪的,不過,是(從上面的代碼)

NSLog(@" descriptor's class = %@", NSStringFromClass([descriptor class])); 

打印出來'NSManagedObject',而

NSLog(@" experiment's class = %@", NSStringFromClass([experiment class])); 

打印出'實驗'。

有誰知道這是爲什麼? MeasurementDescriptor與我的其他NSManagedObject子類不同,它沒有ivars(不包括其核心數據屬性)。添加伊娃並沒有改變任何東西。同樣,MeasurementDescriptor是唯一沒有「關係」屬性的NSManagedObject子類。也許這就解釋了這種奇怪...?

回答

2

唯一的解釋是你的MeasurementDescriptor子類實際上並不知道代碼。造成這種情況的最常見原因是:

  1. 在數據模型編輯器中未將實體的Class屬性設置爲正確的類。
  2. 不將子類的源文件添加到目標。

這是很容易做到與核心數據,因爲如果它不能找到一個專門的子類,它不抱怨,但只是返回與實體的屬性鍵名初始化一個通用的NSManagedObject。

+0

我同意你的解釋,但是你列出的案例都不適用於我的例子。 MeasurementDescriptor的實體類是MeasurementDescriptor,源文件包含在項目中。事實上,這就是NSLog系列提醒我注意這個問題的地方。可能是在從模型A(其中沒有MeasurementDescriptor)遷移到僅存在於一個模型中的模型B(其中引入了MeasurementDescriptor)中的實體被視爲NSManagedObjects的過程中。雖然我不確定爲什麼會這樣。 – westsider 2010-10-18 18:02:52