我想让NSManagedObject的子类作为NSDictionary的键。因此,我必须遵循NSCopying并实现copyWithZone:。
一开始,我认为我必须做一些类似的事情:
-(id)copyWithZone:(NSZone*)zone{
return [NSEntityDescription insertNewObjectForEntityForName:@"Thing" inManagedObjectContext:self.context]
}然而,这将产生副作用,将一些新的东西插入到我的数据库中,这是我想要避免的。
在NSManagedObject中实现NSCopying的最佳方式是什么
发布于 2015-04-23 06:20:21
NSManagedObject的一个实例是可变的,这使得它不是字典键的一个很好的候选者(这当然是为什么NSDictionary复制键值- if原始键是可变的,副本不会改变)。
那么,您是希望使用托管对象的当前值作为键,还是希望将对象与托管对象本身相关联,而不考虑其当前值?
如果是后者,则应考虑使用托管对象的objectID属性作为键,该属性唯一地标识托管对象。此属性的类型是实现NSCopying的类NSManagedObjectID。
HTH
发布于 2015-04-23 06:36:50
在NSManagedObject上实现NSCopying不是一个好主意。正如你所发现的,它们并不符合这个模型。一个实例被链接到它的托管对象上下文并从那里链接到持久化存储的事实意味着,除非你想复制它,否则复制是没有意义的。当然,复制是NSCopying的全部意义所在。
@CRD提供了一些很好的建议。根据您的需要,另一种方法是使用NSMapTable而不是NSDictionary。它类似于NSDictionary,但不同之处在于不需要符合NSCopying的弱引用键。
https://stackoverflow.com/questions/29809611
复制相似问题