ios - existing - core data vs sqlite
CoreData obtiene valores distintos de Atributo (3)
Debe usar la tienda de respaldo para ayudarlo a obtener registros distintos.
Si quieres obtener una matriz con solo John, Betty, Edward, así es como lo haces:
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);
Estoy tratando de configurar mi NSFetchRequest
en los datos centrales para recuperar los valores únicos para un atributo específico en una entidad. es decir
una entidad con la siguiente información:
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 |
¿Cómo puedo configurar la solicitud para devolver una matriz con solo: John, Betty, Edward?
Eche un vistazo a Obtención de valores de propiedad específicos , no es necesario usar un conjunto para obtener valores distintos.
Está tratando de usar los datos centrales como una base de datos de procedimientos en lugar de como un gestor de gráficos de objeto como lo pretendía la API, por lo que no encontrará una manera fácil de hacerlo.
No hay una forma directa de hacerlo en Core Data porque Core Data se ocupa de objetos en lugar de valores. Dado que se garantiza que los objetos administrados serán únicos, a Core Data no le importan demasiado los valores de cada objeto ni si son duplicados o los valores de otros objetos.
Para encontrar los valores únicos:
- Realice una búsqueda por valor específico . Eso le dará una variedad de diccionarios con un
name
clave y un valor del nombre de la cadena en sí. - En la matriz devuelta en (1) utilice un operador de recopilación de conjuntos para devolver un conjunto de valores únicos.
Entonces, algo como:
NSSet *uniqueNames=[fetchedNameDicts valueForKeyPath:@"@distinctUnionOfSets.name"];
... que devolverá un conjunto de objetos NSString, todos con un valor único.