我有两个核心数据实体: Assets 和图像。 Assets 与图像具有一对多和一对一关系。见图:
对于域,Asset>keyImage 必须是 Asset>images 之一,因此如果从 Asset>images 中删除了某个图像,则该图像不再是 keyImage,并且 keyImage 变为 nil。 (我有那部分工作)。
如果 Asset>keyImage 变为 nil(被删除),我想将其自动设置为 Asset>images 中的其他图像之一(如果有)。
我的问题是如何放置将 keyImage 设置为 Asset>image 中下一个图像的代码。我在想:
- 在
Asset
的NSManagedObject
子类中重写(void)removeImagesObject:(Image *)value;
,或者我尝试这样做 - 将
NSManagedObject
的Asset
子类注册为观察者[self addObserver:self forKeyPath:@"keyImage"options:NSKeyValueObservingOptionNew context:&assetContextForKVO];
自身。在这里,我有一半的时间成功,一半的时间我从核心数据中收到“修复丢失的删除传播”错误。
或者完全不同的地方?
最佳答案
由于 Asset 具有一组图像(如一对多关系所暗示的),因此它知道自身可用的所有图像。如果 keyImage 从 Image 中删除,那么当你的代码引用 Asset 时,它应该检查 keyImage 是否为零。如果是,那么它应该从图像(关系)集中选择另一个图像并将其设置为 keyImage。 SQLite 无法自动为您执行此操作,就像它无法任意将图像分配给您的 Assets 一样。
@interface Asset : NSManagedObject
//...
@property (nonatomic, retain) NSSet *images;
@property (nonatomic, retain) Image *keyImage;
//...
@end
@interface MyViewController
//...
// fetch an asset object then
if (self.asset.keyImage == nil && [self.asset.images count] > 0)
[self.asset addImagesObject:[asset.images anyObject]];
@end
关于objective-c - 当删除前一个元素时,如何设置与其他元素的一对一关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24614119/