当我向一个copy子类发送NSManagedObject消息时,我会得到以下错误:
“‘NSInvalidArgumentException”,原因:'-JTPModel copyWithZone::未识别的选择器发送到实例0x8d19a10’
为什么我不能复制NSManagedObjects
发布于 2013-12-03 16:12:07
@aleroot的链接很好。对于为什么这样做的基本问题,问题是对于如何执行复制没有一个单一的答案。您必须决定如何复制对象。所有面向对象的语言中的所有对象都是如此,而不仅仅是NSManagedObject。
考虑具有两个子对象和父对象所在的城市对象的父对象的情况。如果我抄袭父母,我是否也要复制孩子的副本?可能是的,因为你不希望同一个孩子有多个父母。我要复印一下这座城市吗?可能不是,因为每个人都没有自己的芝加哥副本。你应该在那里建立一个新的链接。您只能知道这一点,因为您知道对象代表什么。只有程序员才能实现这个逻辑。
一些面向对象的语言为所有对象提供了一个简单的“浅”复制解决方案(在上述情况下是不合适的)。ObjC为集合对象提供此功能,但不为泛型对象提供。相反,您需要通过遵循<NSCopying>协议来实现策略。
只是一个侧面的历史:在ObjC中,对带注释的“属性”的语言支持是相当新的。几年前,对象知道它们的ivars,但是运行时没有关于它们的语义的有用信息(例如它们是副本、强引用还是弱引用)。这使得对象的自动复制变得非常困难,即使在简单的情况下也是如此。有一个叫做NSCopyObject()的自动浅拷贝函数,但是它很容易出错,而且是造成的麻烦比它解决的更多.幸运的是,它最终在iOS 6和OSX10.8中被否决了。
https://stackoverflow.com/questions/20354773
复制相似问题