usar tutorial query porque objective example efecto data apple iphone core-data ios nsfetchrequest

iphone - query - tutorial core data



Datos principales, ¿cómo obtener el ID de objeto de NSManagedObject cuando NSFetchRequest devuelve NSDictionaryResultType? (4)

La única solución que he encontrado hasta ahora es ejecutar una segunda solicitud de recuperación, que es similar a la solicitud de recuperación inicial, excepto las siguientes diferencias:

[fetchRequest setReturnsObjectsAsFaults:YES]; [fetchRequest setPropertiesToFetch:nil]; [fetchRequest setFetchLimit:1]; [fetchRequest setFetchOffset:index]; // The index for which the objectID is needed [request setResultType:NSManagedObjectIDResultType];

Esto hará que la solicitud de búsqueda devuelva una matriz con exactamente un objeto, el objectID deseado. El rendimiento parece bueno, incluso cuando el resultado de la solicitud de búsqueda inicial contiene 10000 objetos.

Si hay formas mejores de manejar esto, me alegraría que alguien pudiera publicarlos aquí.

Tengo una NSFetchRequest que devuelve las propiedades de los objetos en un NSDictionaryResultType . ¿Es posible obtener también ObjectId de los objetos dentro de este diccionario? De lo contrario, tendré que ejecutar la consulta con un tipo de NSManagedObjectResultType de NSManagedObjectResultType que es mucho más lento para una gran cantidad de elementos devueltos.


La respuesta de Nick Hutchinson en Swift:

let idDescription = NSExpressionDescription() idDescription.name = "objectID" idDescription.expression = NSExpression.expressionForEvaluatedObject() idDescription.expressionResultType = .objectIDAttributeType

No puedo comentar sobre eso porque no tengo suficientes representantes :(


Sí, puedes, usando la muy ingeniosa pero mal documentada clase NSExpressionDescription . NSExpressionDescription agregar un objeto NSExpressionDescription correctamente configurado a la matriz de objetos NSPropertyDescription que estableció a través de setPropertiesToFetch: para su NSFetchRequest .

Por ejemplo:

NSExpressionDescription* objectIdDesc = [[NSExpressionDescription new] autorelease]; objectIdDesc.name = @"objectID"; objectIdDesc.expression = [NSExpression expressionForEvaluatedObject]; objectIdDesc.expressionResultType = NSObjectIDAttributeType; myFetchRequest.propertiesToFetch = [NSArray arrayWithObjects:objectIdDesc, anotherPropertyDesc, yetAnotherPropertyDesc, nil]; NSArray* fetchResults = [myContext executeFetchRequest:myFetchRequest error:&fetchError];

Debería tener una clave @"objectID" en los diccionarios que obtiene de su solicitud de búsqueda.


NSFetchRequest *request = [[NSFetchRequest alloc] init]; request.entity = [NSEntityDescription entityForName:@"yourEntity" inManagedObjectContext:context]; request.sortDescriptors = [NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES], nil]; request.predicate = nil; request.fetchLimit = 20; NSError *error = nil; NSArray fetchedResults = [context executeFetchRequest:request error:&error]; NSLog(@"%@", [fetchedResults valueForKey:@"objectID"]);

Como los resultados obtenidos ya están en una matriz, ¿por qué no los saca con el valor valueForKey: @ "objectID"? Limpio, simple, solo necesita una solicitud de obtención para que pueda obtener todos los demás datos que necesita también.