0

所以我有几个在我的几个核心数据实体中通用的属性。备注、网址等

我有一个用于编辑此信息的视图控制器,并将实体作为 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;      
}

这样我就可以设置事物的值并像往常一样保存 managedObjectContext 。

但是,这会使我的应用程序崩溃,但前提是我进入和退出视图控制器以一遍又一遍地编辑该字段。

这让我想到了我的问题:使用单个视图控制器编辑多个核心数据实体上的公共字段的最佳方法是什么?我应该在调用视图控制器时设置布尔值并填充正确的实体属性吗?

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 回答