(自我询问和自我回答,因为我花了几个小时在网上寻找这个,大部分资源都说“我最终解决了它”而没有给出解释)
我有一个非常简单的Core Data + Bindings应用程序:
上面的第3项导致应用程序崩溃,错误:
[(my NSManagedObject) copyWithZone:]: unrecognized selector sent to instance
实现该方法(!)并在那里放置一个断点,我发现它是由Apple的NSCell类调用的 - 这没有多大帮助:(。
答案 0 :(得分:25)
结果证明以上所有都需要触发这一点,而XCode允许你在99.9%的情况下做错事,如果不是100%的话。
核心数据对象无法实现copyWithZone: - 这会导致崩溃
使用Bindings填充tableview时,它会尝试复制NSArrayController中对象的值以呈现每个列
...但如果您未能完全指定Column绑定(Xcode允许您指定一半),则tableview会尝试对象上的“复制”而不是< EM>值
我的绑定中的错误:我已经指定表列的“值”为:
Controller Key =“arrangeObjects” 模型关键路径=(空白)
(这是XCode4自动完成中的一个错误 - 当你过快地删除时,它会删除ModelKeyPath字段)
完成输入绑定,例如:
Model Key Path =“value”
......一切都恢复了。
答案 1 :(得分:8)
我还想在这里发帖,因为我有类似问题的类似问题
清空定义的对象:
错误的代码:
@property (nonatomic, copy, readwrite) MSender * sender;
这应该引发编译错误,因为引用计数Xcode不知道如何复制我的对象。相反,它在运行时失败了......
编写代码:
@property (nonatomic, strong, readwrite) MSender * sender;
希望它有所帮助。
答案 2 :(得分:6)
感谢您提供此解决方案,它指出了我正确的方向。对于那些学习 InterfaceBuilder 的人,我希望这些附加信息有所帮助。
在构建教程时,我无意中将Text field Cell - Text Cell
绑定到ArrayController.ObjectValue
。
真正的绑定应该发生在
Table Column > Table Cell View > Static Text - Table View Cell
那个是正确的,但在视觉上在它下面的树中(由于我不理解的原因,IB需要Text Field Cell
。)我也绑定了:
Table Column > Text Field Cell - Text Cell
第二个绑定尝试复制整个对象,因为路径为objectValue
没有键,它触发了这个错误。
可能是一个新手的错误,但这意味着走过每个对象并检查绑定,我遇到了这个一个。
答案 3 :(得分:3)
作为避免绑定出现任何问题的提示,可以将NSManagedObject
转换为NSDictionary
,同时使用:[object dictionaryWithValuesForKeys:[[object entity] attributeKeys]]
填充控制器,连接和连接更容易debug: - )
顺便感谢指针!
答案 4 :(得分:1)
当我尝试实现主 - 详细信息绑定时遇到此错误。类似于部门/员工的东西。我试图将一个arrayController绑定到Department的“selection.employees”并得到:
- [Employee copyWithZone:]:无法识别的选择器发送到实例
原来,员工之间的关系并没有像预期的那样达到目标,而是达到了一致。一旦我纠正了这一点,一切都很好。
答案 5 :(得分:0)
我也有类似的问题,它来自调用ProxyObject而不是来自数组控制器的实际对象。
例如:
MYEntity *entity = EntityController.selection;
NSString *property = entity.property; // <--- causes the error
但
MYEntity *entity = EntityController.selectedObjects firstObject]; // <--- fixes the error
NSString *property = entity.property;
答案 6 :(得分:0)
答案 7 :(得分:0)
当我从NSTableViewDataSource
函数-tableView:objectValueForTableColumn:row:
返回一个视图时,我得到了这个。相反,它应该返回一个值(例如NSString*
)。 (鉴于它的名字,这并不奇怪,但是错误对于发现它没有帮助。我想到的函数是-tableView:viewForTableColumn:row:
中的NSTableViewDelegate
。)