核心数据获取请求不返回不同的结果
Posted
技术标签:
【中文标题】核心数据获取请求不返回不同的结果【英文标题】:core data fetch request does not return distinct results 【发布时间】:2014-07-29 13:03:12 【问题描述】:我正在尝试从核心数据实体返回不同的结果,然后将其放入弹出菜单中。我只希望具有请求属性的实体出现在返回的字典中一次,以便它可以用作另一个弹出窗口的谓词。
例如 记录:
名称 |身份证
测试1 | 111
测试1 | 222
测试2 | 333
会回来的
Test1
Test2
因此可以将其设置为NSPopUpButton
的谓词name
。当用户选择该名称时,它将设置第二个弹出窗口,其中包含一组相应值的内容。
例如
带有Test1
的名称弹出窗口作为选定对象产生
内容集为111
和222
的ID 弹出窗口
所以我从这个获取请求开始,基于我在 SO 上阅读的文章。
-(void)fetchItems
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Equipment"];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Equipment" inManagedObjectContext:[[NSApp delegate] managedObjectContext]];
fetchRequest.entity = entity;
fetchRequest.propertiesToFetch = [NSArray arrayWithObject:[[entity propertiesByName] objectForKey:@"item"]];
fetchRequest.resultType = NSDictionaryResultType;
[fetchRequest setReturnsDistinctResults:YES];
NSArray *dictionaries = [[[NSApp delegate] managedObjectContext] executeFetchRequest:fetchRequest error:nil];
NSLog (@"names: %@",dictionaries);
但是 NSLog 仍然返回 Nondistinct 记录!这是日志:
names: (
item = item2;
,
item = item1;
,
item = item1;
)
有没有人知道为什么这个 fetch 没有正确执行?另外,根据我已经解释过的我想做的事情,我的逻辑是否正确? 谢谢
【问题讨论】:
您的代码似乎正确。据我记得,您不必使用[entity propertiesByName]
。简单的fetchRequest.propertiesToFetch = @[@"item"]
就足够了
感谢您简化该行。你是对的。但是查询仍然没有得到明显的结果。
那我不知道...你在用NSSQLiteStoreType
吗?根据这个答案:***.com/a/5014226/2128900setReturnsDistinctResults
可能不适用于其他商店类型。
【参考方案1】:
使用集合对象NSSet
...
在您的 fetchItems
方法中遵循这一行:
NSArray *dictionaries = [[[NSApp delegate] managedObjectContext] executeFetchRequest:fetchRequest error:nil];
添加这一行:
NSSet *setDictionaries = [NSSet setWithArray:dictionaries];
更改您的日志:
NSLog (@"names: %@",setDictionaries);
请参阅Apple Documentation。
也很有帮助About Collections
【讨论】:
以上是关于核心数据获取请求不返回不同的结果的主要内容,如果未能解决你的问题,请参考以下文章