CoreData(IOS)多列上的唯一约束?

Gre*_*reg 6 iphone core-data ios

在CoreData for iPhone应用程序中,是否可以在多列上具有唯一约束?

例如:

  • 有Event,EventItems,Items实体
  • EventItems实体有一个ORDER列
  • 因此,EventItem的ORDER列对于与同一EVENT相关的所有实例应该是唯一的

所以问题是:

  1. 我怎样才能在coredata中设置这个约束?
  2. 如果它没有直接支持任何建议如何以编程方式到位?

Str*_*pes 6

去做

对于任何核心数据约束,您可以在一次操作多个单独的托管对象时查看实现:

- (BOOL)validateForDelete:(NSError **)error
- (BOOL)validateForInsert:(NSError **)error
- (BOOL)validateForUpdate:(NSError **)error
Run Code Online (Sandbox Code Playgroud)

(我通常有核心数据为实体制作.h和.m文件,然后为这样的事情制作我自己的类别,所以如果我稍后更改实体,我没有那么多的工作)

如果您有某些东西只需要确保单个托管对象中的值是正确的,您可以使用 -validate<Key>:error:

为了做你想要的,我会让EventItems的validateForInsert/validateForUpdate调用一个常用的方法(也许是validateUniqueOrder).在该方法中,我将使用从EventItems到Event的关系,然后获取与Event相关的所有EventItem,然后检查唯一性.我有很少的关系,所以我没有任何花哨的东西,但如果你有很多与给定事件相关的事件项,你可以查看NSFetchRequests的setPropertiesToFetch方法.或者也许你可以提出一个可以直接搜索重复值的查询(我从来没有,所以如果你这样做,请在这里回复以启发我).