【问题标题】: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 的名称弹出窗口作为选定对象产生 内容集为111222 的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吗?根据这个答案:stackoverflow.com/a/5014226/2128900setReturnsDistinctResults 可能不适用于其他商店类型。

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


【解决方案1】:

使用集合对象NSSet...

在您的 fetchItems 方法中遵循这一行:

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

添加这一行:

NSSet *setDictionaries = [NSSet setWithArray:dictionaries];

更改您的日志:

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

请参阅Apple Documentation

也很有帮助About Collections

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    相关资源
    最近更新 更多