gpt4 book ai didi

objective-c - NSManagedObject 的副本

转载 作者:行者123 更新时间:2023-12-03 17:52:57 25 4
gpt4 key购买 nike

当我将 copy 消息发送到 NSManagedObject 子类时,出现以下错误:

'NSInvalidArgumentException',原因:'-[JTPModel copyWithZone:]:无法识别的选择器发送到实例 0x8d19a10'

为什么我不应该复制 NSManagedObjects

最佳答案

@aleroot 的链接很好。对于“为什么”这个基本问题,问题在于对于如何执行复制没有单一的答案。您必须决定如何复制对象。所有面向对象语言中的所有对象都是如此,而不仅仅是 NSManagedObject .

考虑一个父对象有两个子对象和一个父对象所在的城市对象的情况。如果我复制父对象,是否也应该复制子对象?可能是的,因为您不希望同一个 child 有多对 parent 。我应该复制城市吗?可能不会,因为每个人都没有一份属于自己的《芝加哥》。您应该在那里建立一个新链接。你只能知道这一点,因为你知道这些对象代表什么。只有程序员才能实现这个逻辑。

一些面向对象的语言为所有对象提供了一个简单的“浅”复制解决方案(这在上述情况下是不合适的)。 ObjC 为集合对象提供此功能,但不为通用对象提供此功能。相反,您需要通过遵守<NSCopying>来实现策略。协议(protocol)。

只是一段历史:对带注释的“属性”的语言支持在 ObjC 中是相当新的。几年前,对象知道它们的 ivar,但运行时没有关于它们的语义的有用信息(例如它们是副本、强引用还是弱引用)。这使得对象的自动复制变得非常困难,即使在简单的情况下也是如此。有一个自动浅复制函数称为 NSCopyObject() ,但它非常容易出错并且caused much more trouble than it solved 。幸运的是,它最终在 iOS 6 和 OS X 10.8 中被弃用。

关于objective-c - NSManagedObject 的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20354773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com