我试图从核心数据实体返回不同的结果然后放入弹出菜单。我只希望具有所请求属性的实体一次出现在返回的字典中,以便它可以用作另一个弹出窗口的谓词。
e.g。 记录:
名称| ID
Test1 | 111
Test1 | 222
Test2 | 333
会回来
Test1
Test2
因此,可以将其设置为NSPopUpButton
name
的谓词。当用户选择该名称时,它将设置具有相应值的内容集的第二弹出窗口。
e.g。
使用Test1
作为选定对象的名称弹出窗口
内容集为111
和222
所以我开始使用这个获取请求,基于我在这里阅读的文章。
-(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;
}
)
有没有人知道为什么这个获取没有正确执行?另外,根据我所解释的我想做的事情,我是否在逻辑上走在正确的轨道上? 感谢
答案 0 :(得分:2)
使用集合对象NSSet
...
在fetchItems
方法中跟随此行:
NSArray *dictionaries = [[[NSApp delegate] managedObjectContext] executeFetchRequest:fetchRequest error:nil];
添加以下行:
NSSet *setDictionaries = [NSSet setWithArray:dictionaries];
更改日志:
NSLog (@"names: %@",setDictionaries);
也很有帮助About Collections