0

そのため、いくつかのCoreDataエンティティに共通するいくつかのプロパティがあります。メモ、URLなど。

この情報を編集するための単一のViewControllerがあり、エンティティをNSManagedObjectとして渡します。

@property (nonatomic, retain) NSManagedObject *editedObject;
@property (nonatomic, retain) Thing *thing;
@property (nonatomic, assign, getter=isEditingThing) BOOL editingThing;

そして、実際にオブジェクトを変更できる状態にするために、

if([editedObject isKindOfClass:[Thing class]]) {
  thing = (Thing *)editedObject;
  editingThing = YES;      
}

そうすれば、Thingに値を設定して、通常のようにmanagedObjectContextを保存できます。

ただし、これはアプリケーションをクラッシュさせますが、フィールドを何度も編集するためにViewControllerに出入りする場合に限ります。

これが私の質問につながります:単一のView Controllerを使用して、複数のCore Dataエンティティの共通フィールドを編集するための最良の方法は何ですか?View Controllerを呼び出すときに、ブール値を設定して正しいエンティティプロパティを設定する必要がありますか?

4

2 に答える 2

2

thingアクセサーを使用して設定していないため、プロパティが保持されていないと思います。変化する:

thing = (Thing *)editedObject;

に:

[self setThing:editedObject];

より大きな質問については、より多くのコンテキストを提供する必要があると思います。「複数のコア データ エンティティの共通フィールドを編集する」とはどういう意味ですか?

于 2010-07-09T17:52:37.197 に答える
1

両方のエンティティにnotesというプロパティがある場合は、プロパティを変更します。

@property (nonatomic, retain) id managedObject;

次に、設定するときに、オブジェクトが何であるかを気にせずに設定できます。

[[self managedObject] setNotes:...];

managedObjectプロパティに応答するように設定したものが何であれ、notesそれは問題なく機能します。そうでない場合は、エラーが発生し、簡単にテストできます。

あなたはもっと妄想的なルートに行き、それが最初に反応するかどうかをテストすることができます:

if ([[self managedObject] respondsToSelector:@selector(notes)]) {

しかし、その時点でやりたいのはとにかくクラッシュすることだけなので、それは過度に保護されています。

于 2010-07-09T21:42:50.240 に答える