代码之家  ›  专栏  ›  技术社区  ›  DVG

对多个nsmanagedObject使用单个视图

  •  0
  • DVG  · 技术社区  · 14 年前

    所以我有几个在我的核心数据实体中很常见的属性。注释、URL等。

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

    但是,这会使我的应用程序崩溃,但是只有当我一次又一次地进入和退出视图控制器来编辑字段时。

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

    2 回复  |  直到 14 年前
        1
  •  1
  •   Marcus S. Zarra    14 年前

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

    @property (nonatomic, retain) id managedObject;
    

    然后,当你去设置它时,你可以在不考虑对象的情况下设置它:

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

    只要你做了什么 managedObject 响应属性 notes 它会很好地工作。如果没有,它将出错,您可以很容易地进行测试。

    你可以走一条更偏执的路线,测试它是否先做出反应:

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

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

        2
  •  2
  •   Christopher Pickslay    14 年前

    我想象你 thing 属性未被保留,因为您没有使用访问器来设置它。变化:

    thing = (Thing *)editedObject;
    

    到:

    [self setThing:editedObject];
    

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