J'essaie de configurer mon NSFetchRequest
sur les données de base pour récupérer les valeurs uniques d'un attribut spécifique dans une entité. c'est à dire.
une entité avec les informations suivantes:
name | rate | factor |
_______|______|________|
John | 3.2 | 4 |
Betty | 5.5 | 7 |
Betty | 2.1 | 2 |
Betty | 3.1 | 2 |
Edward | 4.5 | 5 |
John | 2.3 | 4 |
Comment configurer la demande de retour d'un tableau avec simplement: John, Betty, Edward?
Vous devez utiliser le magasin de sauvegarde pour vous aider à obtenir des enregistrements distincts.
Si vous voulez obtenir un tableau avec seulement John, Betty, Edward, voici comment vous le faites:
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyEntity"];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:self.managedObjectContext];
// Required! Unless you set the resultType to NSDictionaryResultType, distinct can't work.
// All objects in the backing store are implicitly distinct, but two dictionaries can be duplicates.
// Since you only want distinct names, only ask for the 'name' property.
fetchRequest.resultType = NSDictionaryResultType;
fetchRequest.propertiesToFetch = [NSArray arrayWithObject:[[entity propertiesByName] objectForKey:@"name"]];
fetchRequest.returnsDistinctResults = YES;
// Now it should yield an NSArray of distinct values in dictionaries.
NSArray *dictionaries = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
NSLog (@"names: %@",dictionaries);
Vous essayez d'utiliser Core Data comme une base de données procédurale au lieu d'un gestionnaire de graphes d'objets comme le prévoyait l'API, vous ne trouverez donc pas de moyen facile de le faire.
Il n'y a pas de façon simple de le faire dans Core Data, car Core Data concerne les objets plutôt que les valeurs. Étant donné que les objets gérés sont garantis d'être uniques, Core Data ne se soucie pas beaucoup des valeurs de chaque objet, qu'il s'agisse de doublons ou de valeurs d'autres objets.
Pour trouver les valeurs uniques:
name
et une valeur de la chaîne de nom elle-même.Donc, quelque chose comme:
NSSet *uniqueNames=[fetchedNameDicts valueForKeyPath:@"@distinctUnionOfSets.name"];
... qui renverra un ensemble d'objets NSString tous avec une valeur unique.
Jetez un œil à Récupération de valeurs de propriétés spécifiques , il n'est pas nécessaire d'utiliser un ensemble pour obtenir des valeurs distinctes.