2011-07-11 9 views
4

問題は、サブクラス化されたエンティティの親エンティティプロパティを抽象スーパークラスのエンティティに設定しない限り、サブクラスの属性に割り当てることができないということです。 XCodeの4.0.2でなぜサブクラス化と抽象エンティティのときに親エンティティを設定する必要がありますか?

、これは私が参照していますする親エンティティのプロパティです:

enter image description here

を私は取得しない何が私が親エンティティがparent-を対象として考えていることですエンティティとオブジェクトの関係の子関係は、単にクラス定義によって取得されます。

エンティティA、B及びC:

  • Y:列
  • Z:文字列
    • Aは属性を持つタイプAの抽象エンティティであります
  • B

    @interface A : NSManagedObject { 
    } 
    @property (nonatomic, retain) NSString * y; 
    @property (nonatomic, retain) NSString * z; 
    
    @interface B : A { 
    } 
    @interface C : A { 
    } 
    

    通報

    :なし属性
  • CとタイプAのエンティティは属性

クラスA、BおよびCとタイプAのエンティティがあります

エンティティBとCの親エンティティをエンティティAに設定しないと、試してみると:

私が手
NSEntityDescription *be = [[mom entitiesByName] objectForKey:@"B"]; 
B *b = [[NSManagedObject alloc] initWithEntity:be 
       insertIntoManagedObjectContext:moc]; 

b.y = @"test"; // <<-- This line causes the following error: 

-[NSManagedObject setY:]: unrecognized selector sent to instance 

私は親エンティティを設定した場合、その実体を除いて動作しているようですがストアに持続代わりB.

答えて

3

のあなたが設定することを忘れないでいましたしているように見えますクラスBへのエンティティBのクラス?はいの場合は、bに割り当てられているポインタのタイプを調べる必要があります。実際にはB *ですか?それはNSManagedObject *あなたが取得しているエラーに基づいて、および-initWithEntity:insertIntoManagedObjectContext:のためのドキュメントによると、おそらくだようですが...見え

エンティティによって を指定されたサブクラス がクラスに基づいて行われます動的に生成されますしたがって、モデルにカスタム クラスを指定すると、allocに渡された クラスが置き換えられます。

...モデルが正しく設定されている場合は、B *を取得する必要があります。

関連する問題