当前一个元素被删除时,如何设置与其他元素的一对一关系?

时间:2014-07-07 15:21:42

标签: objective-c cocoa core-data

我有两个核心数据实体:资产和图像。资产具有与图像的To-Many和To-One关系。见图:

To-Many and To-One relationship

对于域名,Asset> keyImage必须是Asset>图片之一,因此如果从Asset>图片中删除图片,此图片将不再是keyImage,keyImage将变为nil。 (我有那部分工作)。

如果Asset> keyImage变为nil(已删除),我想将其自动设置为Asset>图像中的其他图像之一(如果有)。

我的问题是关于将设置keyImage的代码放在Asset> image中的下一个图像的位置。我在考虑:

  • 覆盖(void)removeImagesObject:(Image *)value;的{​​{1}}子类中的NSManagedObject,或者我试图
  • Asset Asset的子类注册为观察者NSManagedObject。在这里,我有一半的时间成功,有一半的时间我从Core Data“修复丢失的删除传播”错误。

还是某个完全不同的地方?

1 个答案:

答案 0 :(得分:1)

由于Asset有一组图像(如多对多关系所暗示的),因此它知道所有可用的图像。如果从Image中删除keyImage,那么当您的代码引用Asset时,它应检查keyImage是否为nil。如果是,那么它应该从图像(关系)集中选择另一个图像并将其设置为keyImage。 SQLite不能自动为您执行此操作,就像它不能随意将图像分配给您的资产。

@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