1

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]));

「実験」を出力します。

これがなぜなのか誰か知っていますか?私の他の NSManagedObject サブクラスとは異なり、MeasurementDescriptor には ivar がありません (Core Data プロパティは含まれません)。ivar を追加しても何も変わりませんでした。同様に、MeasurementDescriptor は、「関係」プロパティを持たない唯一の NSManagedObject サブクラスです。ひょっとして、これがこの異様さの理由なのだろうか…???

4

1 に答える 1

2

唯一の説明は、MeasurementDescriptorサブクラスが実際にはコードに認識されていないということです。これの最も一般的な原因は次のとおりです。

  1. データ モデル エディタClassで、エンティティの属性を正しいクラスに設定していません。
  2. サブクラスのソース ファイルをターゲットに追加しない。

専用のサブクラスが見つからない場合、文句を言うのではなく、エンティティのプロパティ キー名で初期化されたジェネリック NSManagedObject を返すだけなので、これは Core Data で簡単に実行できます。

于 2010-10-15T20:56:27.573 に答える