使用Core Data检索唯一结果集 [英] Retrieving a unique result set with Core Data

查看:120
本文介绍了使用Core Data检索唯一结果集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个基于核心数据的应用程序来管理一堆实体。我想要能够做到以下。



我有一个实体SomeEntity的属性:name,type,rank,foo1,foo2。 p>

现在,SomeEntity有几行,如果我们严格说SQL语句。我想要完成的是只检索可用的类型,即使每个实例可以有重复的类型。我也需要他们按照秩序返回。所以在SQL中,我要找的是以下:



SELECT DISTINCT(type)ORDER BY rank ASC



这是我到目前为止打破的代码:

  NSError * error = NULL; 
NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setReturnsDistinctResults:YES];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:@type,@rank,nil]];
NSEntityDescription * entity = [NSEntityDescription entityForName:@SomeEntityinManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

//按排序排序
NSSortDescriptor * rankDescriptor = [[NSSortDescriptor alloc] initWithKey:@rankascending:YES];
NSArray * sortDescriptors = [[NSArray alloc] initWithObjects:rankDescriptor,nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[rankDescriptor release];

NSArray * fetchResults = [managedObjectContext executeFetchRequest:fetchRequest error:& error];

[fetchRequest release];

return fetchResults;

现在使用以下代码崩溃:无效的keypath部分传递给setPropertiesToFetch :

$

  

解决方案

NSManagedObjectContext * ctx; / * some ctx * /
NSFetchRequest * req; / *你的请求* /
NSEntityDescription * entity = [NSEntityDescription entityForName:@SomeEntityinManagedObjectContext:context];
NSDictionary * entityProperties = [entity propertiesByName];
[req setEntity:entity];
[req setReturnsDistinctResults:YES];
[req setPropertiesToFetch:[NSArray arrayWithObject:[entityProperties objectForKey:@type]]];
[req setSortDescriptors:[NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@rankascending:YES]]];
NSArray * result = [ctx executeFetchRequest:req error:nil];


I have a core data based app that manages a bunch of entities. I'm looking to be able to do the following.

I have an entity "SomeEntity" with the attributes: name, type, rank, foo1, foo2.

Now, SomeEntity has several rows if we're speaking strictly in SQL terms. What I'm trying to accomplish is to retrieve only available types, even though each instance can have duplicate types. I also need them returned in order according to rank. So in SQL, what I'm looking for is the following:

SELECT DISTINCT(type) ORDER BY rank ASC

Here is the code I have so far that's breaking:

NSError *error = NULL;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setReturnsDistinctResults:YES];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:@"type", @"rank", nil]];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"SomeEntity" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

// sort by rank
NSSortDescriptor *rankDescriptor = [[NSSortDescriptor alloc] initWithKey:@"rank" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:rankDescriptor,nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[rankDescriptor release];

NSArray *fetchResults = [managedObjectContext executeFetchRequest:fetchRequest error:&error];

[fetchRequest release];

return fetchResults;

Right now that is crashing with the following: Invalid keypath section passed to setPropertiesToFetch:

解决方案

NSManagedObjectContext * ctx ; /* some ctx */    
NSFetchRequest * req; /* your request */
NSEntityDescription *entity = [NSEntityDescription entityForName:@"SomeEntity" inManagedObjectContext:context];
NSDictionary *entityProperties = [entity propertiesByName];
[req setEntity:entity];
[req setReturnsDistinctResults:YES];
[req setPropertiesToFetch:[NSArray arrayWithObject:[entityProperties objectForKey:@"type"]]];
[req setSortDescriptors:[NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"rank" ascending:YES]]];
NSArray * result = [ctx executeFetchRequest:req error:nil];

这篇关于使用Core Data检索唯一结果集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆