核心数据获取请求不会返回不同的结果

时间:2014-07-29 13:03:12

标签: objective-c macos cocoa core-data nsfetchrequest

我试图从核心数据实体返回不同的结果然后放入弹出菜单。我只希望具有所请求属性的实体一次出现在返回的字典中,以便它可以用作另一个弹出窗口的谓词。

e.g。 记录:

名称| ID

Test1 | 111

Test1 | 222

Test2 | 333

会回来 Test1 Test2

因此,可以将其设置为NSPopUpButton name的谓词。当用户选择该名称时,它将设置具有相应值的内容集的第二弹出窗口。

e.g。 使用Test1作为选定对象的名称弹出窗口 内容集为111222

的ID弹出式窗口

所以我开始使用这个获取请求,基于我在这里阅读的文章。

-(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;
}
)

有没有人知道为什么这个获取没有正确执行?另外,根据我所解释的我想做的事情,我是否在逻辑上走在正确的轨道上? 感谢

1 个答案:

答案 0 :(得分:2)

使用集合对象NSSet ...

fetchItems方法中跟随此行:

NSArray *dictionaries = [[[NSApp delegate] managedObjectContext] executeFetchRequest:fetchRequest error:nil];

添加以下行:

NSSet *setDictionaries = [NSSet setWithArray:dictionaries];

更改日志:

NSLog (@"names: %@",setDictionaries);

请参阅Apple Documentation

也很有帮助About Collections