对多个NSManagedObject使用单个视图

时间:2010-07-09 17:34:34

标签: iphone core-data nsmanagedobject

所以我有几个属性在我的几个核心数据实体中很常见。备注,网址等

我有一个用于编辑此信息的视图控制器,我将实体作为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,就像正常一样。

但是,这会导致我的应用程序崩溃,但只有当我进入和退出View Controller以反复编辑字段时才会崩溃。

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

2 个答案:

答案 0 :(得分:2)

我认为您的thing属性未被保留,因为您没有使用访问者进行设置。变化:

thing = (Thing *)editedObject;

为:

[self setThing:editedObject];

至于你更大的问题,我认为你需要提供更多背景信息。 “在多个核心数据实体上编辑公共字段”是什么意思?

答案 1 :(得分:1)

如果两个实体都有一个名为notes的属性,那么请更改您的属性:

@property (nonatomic, retain) id managedObject;

然后当你去设置它时,你可以设置它而不关心对象是什么:

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

只要您设置managedObject以响应属性notes,它就可以正常工作。如果没有,它将会出错,您可以轻松测试。

你可以走更偏执的路线并测试它是否先响应:

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

但这是过度保护,因为你唯一想做的就是崩溃。