109 votes

CoreData erreur « data : " <fault>"</fault>

J'essaie d'extraire des données à partir de CoreData avec le code suivant

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 devrait avoir 9 objets correspondants et elle trouve les 9 objets. Ainsi, le prédicat doit travailler, mais je reçois ce dans la console

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>)"
)

Ça marchait parfaitement bien jusqu'à ce que j'ai fait le changement suivant dans la Grotte.m qui est l'Entité

J'ai ajouté MKAnnotation en tant que délégué de la Grotte.h et a ajouté ce code dans la Grotte.m

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

Est-il un moyen de débogage?

280voto

jrturton Points 64875

Ce comportement est normal, la base de données ne sera pas de retour plein d'objets jusqu'à ce que vous avez besoin pour accéder à la persistance des valeurs des objets. Chacun de vos objets retournés sera une "faute" jusqu'à ce point.

Vous pouvez forcer la demande de récupération pour revenir plein d'objets à l'aide [request setReturnsObjectsAsFaults:NO], mais dans la plupart des cas, ce que vous avez sera très bien. Regarder la documentation NSFetchRequest pour plus d'informations.

Si vous accédez à l'une des propriétés, la base de données permettra d'aller à la persistance de la stocker et de récupérer le reste de vos valeurs, vous obtiendrez alors la description complète dans les journaux.

Cela semble être un malentendu commun que j'ai décidé d'écrire à ce sujet, ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X