Si vous visez iOS 4.0 ou une version ultérieure et que vous n'utilisez pas le magasin SQL de Core-Data, pourquoi ne pas utiliser la méthode suivante predicateWithBlock:
?
Ce qui suit va générer le NSFetchRequest
que vous voulez.
- (NSFetchRequest*) fetchRequestForSingleInstanceOfEntity:(NSString*)entityName groupedBy:(NSString*)attributeName
{
__block NSMutableSet *uniqueAttributes = [NSMutableSet set];
NSPredicate *filter = [NSPredicate predicateWithBlock:^(id evaluatedObject, NSDictionary *bindings) {
if( [uniqueAttributes containsObject:[evaluatedObject valueForKey:attributeName]] )
return NO;
[uniqueAttributes addObject:[evaluatedObject valueForKey:attributeName]];
return YES;
}];
NSFetchRequest *req = [NSFetchRequest fetchRequestWithEntityName:entityName];
req.predicate = filter;
return req;
}
Vous pouvez ensuite créer une nouvelle méthode pour exécuter la recherche et renvoyer les résultats souhaités.
- (NSArray*) fetchOneInstanceOfEntity:(NSString*)entityName groupedBy:(NSString*)attributeName
{
NSFetchRequest *req = [self fetchRequestForSingleInstanceOfEntity:entityName groupedBy:attributeName];
// perform fetch
NSError *fetchError = nil;
NSArray *fetchResults = [_context executeFetchRequest:req error:&fetchError];
// fetch results
if( !fetchResults ) {
// Handle error ...
return nil;
}
return fetchResults;
}