核心数据不同的提取给出空数组
Posted
技术标签:
【中文标题】核心数据不同的提取给出空数组【英文标题】:Core-data distinct fetch give empty array 【发布时间】:2012-09-24 15:57:39 【问题描述】:我花了几个小时试图让 fetch 工作。我需要删除重复项,所以我想我可以遵循本指南core-data-how-to-do-a-select-distinct 但它总是给我一个空数组。
这是我的代码:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"RBTag" inManagedObjectContext:[self context]];
request.entity = entity;
request.propertiesToFetch = [NSArray arrayWithObject:[[entity propertiesByName] objectForKey:@"name"]];
request.returnsDistinctResults = YES;
request.resultType = NSDictionaryResultType;
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
NSError *error = nil;
NSArray *distincResults = [[self context] executeFetchRequest:request error:&error];
NSLog(@"Result: %@", distincResults);
我没有错误。我检查了 NSPropertyDescription,它确实找到了我的财产。 如果我注释掉:
request.resultType = NSDictionaryResultType;
然后我得到结果,但它并不明显。 =(
【问题讨论】:
如果您注释掉returnsDistinctResults
,但结果类型仍设置为NSDictionaryResultType
,会发生什么情况?那么它会返回任何东西吗?
不行,还是给我一个空数组。
【参考方案1】:
任何指南或苹果文档中都没有,但经过艰苦的谷歌搜索后,我发现了这篇文章: bbarnheart 必须在将 resultType 更改为 NSDictionaryResultType 之前将上下文保存到持久存储。
【讨论】:
在 Apple 文档中,但隐藏在setIncludesPendingChanges:
属性的文档中:“不支持 YES 值与结果类型 NSDictionaryResultType 结合使用,包括聚合结果的计算(例如如 max 和 min)。对于字典,从 fetch 返回的数组反映了持久存储中的当前状态,并且不考虑上下文中的任何未决更改、插入或删除。"【参考方案2】:
propertiesToFetch
需要一个属性名称的数组,但您将它设置为一个NSAttributeDescription
的数组。试试
request.propertiesToFetch = [NSArray arrayWithObject:@"name"];
如果您不设置request.resultType = NSDictionaryResultType;
,则propertiesToFetch
将被忽略。
【讨论】:
request.propertiesToFetch = [NSArray arrayWithObject:@"name"];少了很多代码。谢谢! 这也是完全不同的东西...... ;-)以上是关于核心数据不同的提取给出空数组的主要内容,如果未能解决你的问题,请参考以下文章