2011-09-05 5 views
95

trato de sacar datos de CoreData con el siguiente códigoCoreData error "datos: <fault>"

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
request.entity = [NSEntityDescription entityForName:@"Cave" inManagedObjectContext:self.context]; 
request.predicate = [NSPredicate predicateWithFormat:@"(latitude > 0) AND (longitude > 0)"]; 

NSError *error; 
NSLog(@"%@",[self.context executeFetchRequest:request error:&error]); 
NSLog(@"%@",[error localizedDescription]); 

CoreData debe tener 9 objetos que coinciden y se encuentran los 9 objetos. Así que el predicado debe trabajar pero conseguir esto en la consola

2011-09-05 07:41:42.267 CaveConditions[6930:11903] (
    "<NSManagedObject: 0x7368060> (entity: Cave; id: 0x7367880 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p31> ; data: <fault>)", 
    "<NSManagedObject: 0x73547e0> (entity: Cave; id: 0x7356e20 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p40> ; data: <fault>)", 
    "<NSManagedObject: 0x73681e0> (entity: Cave; id: 0x7363e60 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p42> ; data: <fault>)", 
    "<NSManagedObject: 0x7368280> (entity: Cave; id: 0x7356be0 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p72> ; data: <fault>)", 
    "<NSManagedObject: 0x7368320> (entity: Cave; id: 0x733ad80 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p73> ; data: <fault>)", 
    "<NSManagedObject: 0x73683c0> (entity: Cave; id: 0x7333e70 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p91> ; data: <fault>)", 
    "<NSManagedObject: 0x7368480> (entity: Cave; id: 0x7361810 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p101> ; data: <fault>)", 
    "<NSManagedObject: 0x7368570> (entity: Cave; id: 0x7360110 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p105> ; data: <fault>)", 
    "<NSManagedObject: 0x7368610> (entity: Cave; id: 0x73303c0 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p112> ; data: <fault>)" 
) 

Se utiliza para trabajar prefectamenta bien hasta que hice el siguiente cambio en Cave.m que es la entidad

añadí MKAnnotation como delegado en Cave.h y agregó este código en Cave.m

- (CLLocationCoordinate2D)coordinate 
{ 
    CLLocationCoordinate2D location; 
    location.latitude = [self.latitude doubleValue]; 
    location.longitude = [self.longitude doubleValue]; 
    return location; 
} 

¿Hay alguna manera de solucionar esto?

Respuesta

244

Se espera que el comportamiento, los datos principales no devolverán los objetos completos hasta que necesite acceder a los valores persistentes de los objetos. Cada uno de sus objetos devueltos será un 'error' hasta este punto.

Puede forzar la solicitud de recuperación para devolver objetos completos utilizando [request setReturnsObjectsAsFaults:NO], pero en la mayoría de los casos lo que tenga estará bien. Consulte la documentación de NSFetchRequest para obtener más información.

Si accede a una de las propiedades, los datos centrales irán a la tienda permanente y buscarán el resto de sus valores, luego obtendrá la descripción completa en los registros.

Esto parece ser un malentendido tan común que decidí escribir al respecto, here.

+54

puede desactivar la propiedad llamando a [request setReturnsObjectsAsFaults: NO]; –

+1

¡Gracias! eso fue fácil :) – ElizaS

+1

salvavidas amigo, gracias! – Vlad

2

¡Me enfrenté al mismo problema al extraer datos de CoreData! Entonces, seguí el camino @jrturton instruido y lo implementé en Swift 3.

Paso 1: Añadir import CoreData

Paso 2: Añadir el código de abajo. .

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 
var request = NSFetchRequest<NSFetchRequestResult>() 
request = Your_Entity_Name.fetchRequest() 
request.returnsObjectsAsFaults = false 
let arrayOfData = try context.fetch(request) 

Esperanza, que le ayudará. :)

Cuestiones relacionadas