调用 NSArrayController 的 add 的 NSManagedObject 类调用指定初始化程序失败
Posted
技术标签:
【中文标题】调用 NSArrayController 的 add 的 NSManagedObject 类调用指定初始化程序失败【英文标题】:Failed to call designated initializer on NSManagedObject class calling NSArrayController's add 【发布时间】:2017-02-03 09:05:13 【问题描述】:我有两个类 A 和 B,从 A 到 n B 的关系是 1:n。 A中有关系属性bs(无序),B中有a关系属性。
A 和 B 实际上是 NSManagedObject 从项目的核心数据模型中自动生成的。
在 NSViewController 中,我有一个 ArrayController 和一个基于单元格的 NSTableView,我需要通过它来显示和管理 b。
ArrayController 有:
-
模式:类
类名:B
内容集绑定到 a.bs
表格的每一列都绑定到Array Controller 的arrayObjects.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'
挖掘 *** 我发现问题可能与使用以下方法创建托管对象有关:
... = [[B alloc] init];
而不是
... = [NSEntityDescription insertNewObjectForEntityForName:@"B" inManagedObjectContext:_managedObjectContext];
由于我没有显式创建 b 对象,我认为情况并非如此,但我无法弄清楚我做错了什么。
提前感谢您提供的任何帮助。
【问题讨论】:
【参考方案1】:设置 ArrayController:
模式:实体名称
实体名称:B
准备内容:是
【讨论】:
不幸的是,这并不能解决问题。无论如何,谢谢。 阵列控制器的模式是否设置为“实体名称”?【参考方案2】:我将这个问题整理如下:
-
ArrayController 作为 bsController 链接到代码中
按钮启动添加新B的方法:
(IBAction)newB:(NSButton *)senderB *b = [NSEntityDescription insertNewObjectForEntityForName:@"B" inManagedObjectContext:_managedObjectContext];
[_bsController addObject:b];
它可以正常工作,在表格中正确创建一个空行。
【讨论】:
以上是关于调用 NSArrayController 的 add 的 NSManagedObject 类调用指定初始化程序失败的主要内容,如果未能解决你的问题,请参考以下文章
调用 NSArrayController 的 add 的 NSManagedObject 类调用指定初始化程序失败
如何将 NSArrayController 的内容集绑定到多个 NSArrayController 选择?
两个 NSArrayController 和一个关系(CoreData)