核心数据获取唯一属性
Posted
技术标签:
【中文标题】核心数据获取唯一属性【英文标题】:Core Data fetch unique property 【发布时间】:2014-07-07 11:35:13 【问题描述】:我有一个名为Item
的核心数据对象,它有两个属性identifier
和type
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];
注意:此代码是在浏览器中编写的,可能存在错误。
【讨论】:
抱歉,我不明白您的解决方案,将我的提取限制为单个项目?但我想要所有项目,只删除重复项。我不确定我知道该怎么做你所说的所有事情,你能举个例子吗?以上是关于核心数据获取唯一属性的主要内容,如果未能解决你的问题,请参考以下文章