首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NSManagedObject的子类中实现NSCopying

在NSManagedObject的子类中实现NSCopying
EN

Stack Overflow用户
提问于 2015-04-23 05:54:53
回答 2查看 531关注 0票数 0

我想让NSManagedObject的子类作为NSDictionary的键。因此,我必须遵循NSCopying并实现copyWithZone:

一开始,我认为我必须做一些类似的事情:

代码语言:javascript
复制
-(id)copyWithZone:(NSZone*)zone{
     return [NSEntityDescription insertNewObjectForEntityForName:@"Thing" inManagedObjectContext:self.context]
}

然而,这将产生副作用,将一些新的东西插入到我的数据库中,这是我想要避免的。

NSManagedObject中实现NSCopying的最佳方式是什么

EN

回答 2

Stack Overflow用户

发布于 2015-04-23 06:20:21

NSManagedObject的一个实例是可变的,这使得它不是字典键的一个很好的候选者(这当然是为什么NSDictionary复制键值- if原始键是可变的,副本不会改变)。

那么,您是希望使用托管对象的当前值作为键,还是希望将对象与托管对象本身相关联,而不考虑其当前值?

如果是后者,则应考虑使用托管对象的objectID属性作为键,该属性唯一地标识托管对象。此属性的类型是实现NSCopying的类NSManagedObjectID

HTH

票数 2
EN

Stack Overflow用户

发布于 2015-04-23 06:36:50

NSManagedObject上实现NSCopying不是一个好主意。正如你所发现的,它们并不符合这个模型。一个实例被链接到它的托管对象上下文并从那里链接到持久化存储的事实意味着,除非你想复制它,否则复制是没有意义的。当然,复制是NSCopying的全部意义所在。

@CRD提供了一些很好的建议。根据您的需要,另一种方法是使用NSMapTable而不是NSDictionary。它类似于NSDictionary,但不同之处在于不需要符合NSCopying的弱引用键。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29809611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档