1

モデルには、親エンティティ「List」と、単なるリストの一種である「UserList」という名前の子エンティティ(サブエンティティ)があります。「UserList」には独自の属性や関係はなく、Listからすべてを継承します。ListはListItemと多くの関係があります。

XCode4.2にNSManagedObjectサブクラスを生成するように依頼します。リストの場合、それは私が期待するものを生成します、

- (void)insertObject:(NSManagedObject *)value inListItemsAtIndex:(NSUInteger)idx;
- (void)removeObjectFromListItemsAtIndex:(NSUInteger)idx;
...

ただし、生成された「UserList」クラスは、「List」のサブクラスとして宣言された場合に問題がないメソッドを宣言していませんが、それは生成されたものではありません。

@interface UserList : NSManagedObject
@end

UserListは本当にListのサブクラスですか?ヘッダーを変更できますか?それとももっと複雑なことが起こっていますか?

4

1 に答える 1

3

確認すべきことがいくつかあります。まず、List エンティティと UserList エンティティの両方にクラス名を指定したことを確認してから、UserList が List をその親エンティティとして宣言していることを確認します。

ジェネレーターは厄介です。モデル GUI で特にクラス名を割り当てていない場合は、オンザフライで生成されます。残念ながら、生成される順序によっては、正しい情報で生成されないものがあることを意味します (UserList が最初に生成されることを想像してください... List にクラス名を特に指定しなかった場合は、使用することしかわかりません)。 NSManagedObject)。

慣例により、私は常にモデル GUI で明確にクラス名を割り当てます。各エンティティ (エンティティに名前を付ける場所の下) にクラスを具体的に割り当てたときにこれが発生するのを見たことはありませんが、発生する可能性があると思います。

クラス ファイルの再生成を試みます。今回は正しく生成されるかもしれません。

編集

コメント後の説明...

注: 残念ながら、Xcode はこの問題に関して非常に一貫性があります。エンティティに明示的にクラス名を付けないと、それを参照する他のエンティティは「間違った」クラス名で生成されます。

ワークフローの次のオプションのいずれかに従うことをお勧めします。

  1. エンティティごとに GUI で常にクラス名を割り当てます。

  2. 初めて生成するときは、必ずクラスを 2 回生成してください。

  3. Xcode クラス ジェネレーターの代わりにmogenerator https://github.com/rentzsch/mogenerator#readmeを使用します。

于 2012-04-29T03:02:14.133 に答える