2014-07-09 71 views
4

我是iOS开发中的新出价。我正在使用核心数据NSManagedObject来执行插入和提取操作。它工作得很好。但问题是,我想从表中只提取一些选定的记录(MySQL中的条件)。 例如“从城市='浦那'的用户中选择姓名”; 我发现NSPredicate获取过滤的数据。但它提供了数组中的所有数据,而不仅仅是所选数据。对于例如如果结果为上面的查询是:如何获取核心数据中的特定记录

然后NSPredicate结果会给:

fname = Anu 
lname = Padhye 
city = Pune 
id = 3 

有没有办法只能在iOS的Objective-C的取选定的记录/秒?以下是我使用NSManagedObject代码片段:

NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; 

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"User"]; 
    valueData = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy]; 


NSEntityDescription *productEntity=[NSEntityDescription entityForName:@"User" inManagedObjectContext:managedObjectContext]; 
NSFetchRequest *fetch=[[NSFetchRequest alloc] init]; 
[fetch setEntity:productEntity]; 
NSPredicate *p=[NSPredicate predicateWithFormat:@"id == %d", 3]; 
[fetch setPredicate:p]; 
    //... add sorts if you want them 
NSError *fetchError; 
NSArray *fetchedProducts=[valueData filteredArrayUsingPredicate:p]; 

回答

13

试试这个:

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"User"]; 
request.predicate = [NSPredicate predicateWithFormat:@"city == %@ && id == %d", @"Pune", 3]; 
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"id" ascending:YES]]; 

NSArray *results = [managedObjectContext executeFetchRequest:request error:nil]; 

结果阵列现在应该包含谁拥有浦那作为他们与3

+0

的ID城市的所有记录非常感谢。这工作得很好:) –

+0

如何在Core Data中添加“group by”逻辑以避免数据重复。 – Developer