无法在调用NSArrayController的NSManagedObject类上调用指定的初始值设定项添加

时间:2017-02-03 09:05:13

标签: macos cocoa core-data cocoa-bindings nsarraycontroller

我有两个A和B类,从A到n B的关系为1:n。在A中有关系属性bs(未排序),在B中有关系属性。

A和B实际上是从项目的核心数据模型自动生成的NSManagedObject。

在NSViewController中,我有一个ArrayController和一个基于单元格的NSTableView,我需要通过它来显示和管理b。

ArrayController有:

  1. 模式:班级
  2. 班级名称:B
  3. 内容集绑定到a.bs
  4. 表的每一列都绑定到Array Controller arrangeObjects.b_attribute

    该表按预期显示了b,我可以编辑它们。

    尝试添加新b时会出现问题。

    控制器有一个按钮,其动作绑定到Array Controller add:方法。

    不幸的是,当我按下按钮时,我收到以下错误:

    error: CoreData: error: Failed to call designated initializer 
    on NSManagedObject class 'B'
    
    CoreData: error: CoreData: error: Failed to call designated 
    initializer on NSManagedObject class 'B'
    

    挖掘StackOverflow我发现问题可能与使用以下方法创建托管对象有关:

    ... = [[B alloc] init];
    

    而不是

    ... = [NSEntityDescription insertNewObjectForEntityForName:@"B" inManagedObjectContext:_managedObjectContext];
    

    由于我没有明确创建b对象,我不认为是这种情况,但我无法弄清楚我做错了什么。

    提前感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:0)

设置ArrayController:

模式:实体名称

实体名称:B

准备内容:是

答案 1 :(得分:0)

我按如下方式排除了这个问题:

  1. ArrayController链接到代码为bsController
  2. 按钮启动添加新B的方法:

    • (IBAction)newB:(NSButton *)sender {

    B * b = [NSEntityDescription insertNewObjectForEntityForName:@" B"                                      inManagedObjectContext:_managedObjectContext];

    [_ bsController addObject:b]; }

  3. 可行,在表格中正确创建一个空行。