0

我希望将子类NSManagedObject作为NSDictionary. 因此,我必须遵守NSCopying并实施copyWithZone:.

起初我虽然我必须做类似的事情:

-(id)copyWithZone:(NSZone*)zone{
     return [NSEntityDescription insertNewObjectForEntityForName:@"Thing" inManagedObjectContext:self.context]
}

但是,这会产生在我的数据库中插入新内容的副作用,这是我想避免的。

NSCopying实施的最佳方式是NSManagedObject什么?

4

2 回答 2

2

的一个实例NSManagedObject是可变的,这不会使它成为字典键的一个很好的候选者(这当然是NSDictionary复制键值的原因——如果原始键是可变的,则副本不会改变)。

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

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

高温高压

于 2015-04-22T22:20:20.590 回答
1

实施NSCopyingonNSManagedObject不是一个好主意。正如您所发现的,它们不适合该模型。实例链接到其托管对象上下文并从那里链接到持久存储这一事实意味着复制没有意义,除非您确实想要复制它。当然,重复NSCopying.

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

于 2015-04-22T22:36:49.603 回答