核心数据获取唯一属性

Posted

技术标签:

【中文标题】核心数据获取唯一属性【英文标题】:Core Data fetch unique property 【发布时间】:2014-07-07 11:35:13 【问题描述】:

我有一个名为Item 的核心数据对象,它有两个属性identifiertype

Item
----

identifier 
type (A/B)

可以有 2 个具有相同标识符但类型不同的项目。

我需要在一个条件下获取所有项目: 如果两个项目具有相同的标识符,则只显示 A 类型。

也就是说我想确保获取的item会有一个唯一的标识符,并且在多个item具有相同标识符的情况下,将优先考虑type A的item。

如果可能的话,我也不想使用NSDictionaryResultType

【问题讨论】:

【参考方案1】:

您可以使用谓词从 Core Data 中获取以查找(或计数)带有 identifier 的对象(顺便说一下 NOT 使用 id,它是 Cocoa 中的保留字)并且您可以按另一个属性排序,然后您可以将获取结果限制为单个项目。

这将为您提供您正在寻找的优先级。但是,我强烈建议不要以这种方式处理问题,而是编写您的创建代码以避免一开始就出现重复。

更新

我的意思是你不能“获取所有具有一个条件的项目......”。您可以做的是获取每个项目(使用标识符),将获取限制为按type 排序的单个结果,这将为您提供结果。

如果您想要所有类型为“a”的项目,这是可行的。

如果您想要所有项目并在第二遍内存中过滤类型,您可以这样做

你不能合并它们。

现在,如果你想获取每个项目,过滤类型看起来像这样:

NSManagedObjectContext *moc = ...;
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyEntity"];
[fetchRequest setFetchLimit:1];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"identifier == %@", myIdentifier];

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"type" ascending:YES];
NSArray *sortArray = [NSArray arrayWithObject:sort];
[fetchRequest setSortDescriptors:sortArray];

NSError *error = nil;
NSArray *results = [moc executeFetchRequest:fetchRequest error:&error];
if (!results) 
  NSLog(@"Error: %@\n%@", [error localizedDescription], [error userInfo]);
  abort();


id mySingleObject = [results lastObject];

注意:此代码是在浏览器中编写的,可能存在错误。

【讨论】:

抱歉,我不明白您的解决方案,将我的提取限制为单个项目?但我想要所有项目,只删除重复项。我不确定我知道该怎么做你所说的所有事情,你能举个例子吗?

以上是关于核心数据获取唯一属性的主要内容,如果未能解决你的问题,请参考以下文章

NSSortDescriptor 对核心数据获取请求没有影响

CoreData 可以返回唯一的实体属性吗?

获取核心数据对象的唯一日历日期

如何从核心数据中获取唯一字段值(song_type)

swift核心数据获取关系

核心数据:我想要获取的对象中的 pk