Xcode 8.1 核心数据获取特定属性

Posted

技术标签:

【中文标题】Xcode 8.1 核心数据获取特定属性【英文标题】:Xcode 8.1 core data fetching specific properties 【发布时间】:2016-11-21 14:33:13 【问题描述】:

我正在尝试使用以下代码从 Core Data 获取特定属性:

NSFetchRequest *test = [[NSFetchRequest alloc] init];
test.entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:self.currentMainContext];
test.predicate = [NSPredicate predicateWithFormat:@"TRUEPREDICATE"];
test.resultType = NSDictionaryResultType;
test.returnsDistinctResults = YES;
test.propertiesToFetch = @[@"property"];

NSArray *results = [self.currentMainContext executeFetchRequest:test error:error];

但我得到了一个空数组。

如果我注释掉test.resultType = NSDictionaryResultType;,那么我会按预期返回数据库中所有实体的数组。 NSDictionaryResultType 是怎么回事?

【问题讨论】:

【参考方案1】:

NSDictionaryResultTyperesultType 的提取请求具有一个特殊性。includesPendingChanges 的Documentation 声明:

如果值为 NO,则获取请求不检查未保存的更改,而仅返回与持久存储中的谓词匹配的对象。

不支持 YES 值与结果类型 NSDictionaryResultType 结合使用,包括聚合结果的计算(例如 max 和 min)。对于字典,从 fetch 返回的数组反映了持久存储中的当前状态,并且不考虑上下文中的任何未决更改、插入或删除。

所以请确保您已保存更改,或使用NSManagedObjectResultType

【讨论】:

以上是关于Xcode 8.1 核心数据获取特定属性的主要内容,如果未能解决你的问题,请参考以下文章

使用特定对象而不是对象属性获取核心数据

Swift 从实体(核心数据)获取特定的 NSManagedObject

核心数据:获取特定对象的多对多关系中的所有实体?

如何查询具有特定属性值的核心数据对象

为啥 Xcode 无法识别我的核心数据实体的属性

在 xcode 4 中为核心数据属性生成代码