代码之家  ›  专栏  ›  技术社区  ›  CJ.

向子类NSManagedObject添加自定义方法

  •  13
  • CJ.  · 技术社区  · 15 年前

    我想在我的模型代码中利用这种继承。除了属性之外,我想知道是否可以向实体A添加方法,这些方法在实体A的子实体中实现。

    例如:

    1. 我将此方法的实现添加到A、B、C、D中
    2. executeFetchRequest: 检索B的所有实例
    3. 我对检索到的对象调用该方法,它应该调用包含在B的实现中的方法的实现

    我已尝试过此方法,但在调用该方法时,我收到:

    [NSManagedObject方法名称:]:

    我真的希望能够做到这一点,否则我的模型代码将负责确定它所处理的NSManagedObject的类型,并根据该类型执行特殊逻辑,这是不可取的。

    感谢您的帮助,提前谢谢。

    4 回复  |  直到 15 年前
        1
  •  25
  •   Yuji    12 年前

    它应该会起作用。返回的对象 executeFetchRequest: NSManagedObject s(或其子类)

    @interface A:NSManagedObject{
    }
    -(void)someMethod:(NSString*)a;
    @end;
    @interface B:A{
    }
    -(void)someMethod:(NSString*)a;
    @end;
    

    然后在XCode数据建模器中设置它们,如图所示:

    screenshot of XCode modeler

    被管理对象

        2
  •  18
  •   Alex    15 年前

    NSManagedObject --这是为数据存储中的对象创建的对象核心数据。

    被管理对象 ,在其中添加自定义方法,然后设置实体 A B , C D A.

    本质上,您有一个并行的层次结构:一个实体层次结构,另一个类层次结构。你很可能会以实体结束 X 和阶级 X 对于对象模型中的每个实体。

        3
  •  2
  •   michael23    12 年前

    在尝试了大量的解决方案之后,在尝试使用我的自定义方法之前,在我的NSManagedObject子类上调用isMemberOfClass成功了。

    [thing isMemberOfClass:[Thing class]];
    [thing customMethod]; //was getting unrecognized selector sent to instance here before
    
        4
  •  1
  •   John Conde    13 年前

    最初,我创建了我的类,实现了手工输入。我不知道这里有Xcode菜单。我想链接从未出现过!因此,直到我添加并开始测试新的自定义方法(不是setter/getter)之后,我才开始出现错误。

    我的解决方案是更改类的名称,让Xcode通过 Editor->Create NS Mangage Object.... 然后将旧代码剪切并粘贴到新类中。代码没有区别!