J'essaye d'extraire des données 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 doit avoir 9 objets correspondants et il trouve les 9 objets. Donc, le prédicat devrait fonctionner mais je l'obtiens 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>)"
)
Cela fonctionnait parfaitement bien jusqu'à ce que je fasse le changement suivant dans Cave.m qui est l'entité
J'ai ajouté MKAnnotation en tant que délégué dans Cave.h et ajouté ce code dans Cave.m
- (CLLocationCoordinate2D)coordinate
{
CLLocationCoordinate2D location;
location.latitude = [self.latitude doubleValue];
location.longitude = [self.longitude doubleValue];
return location;
}
Existe-t-il un moyen de déboguer cela?
Il s'agit d'un comportement attendu, les données de base ne renverront pas les objets complets tant que vous n'aurez pas besoin d'accéder aux valeurs persistantes des objets. Chacun de vos objets retournés sera une "faute" jusqu'à ce point.
Vous pouvez forcer la demande de récupération à renvoyer des objets complets à l'aide de [request setReturnsObjectsAsFaults:NO]
, mais dans la plupart des cas, ce que vous avez sera bien. Consultez la documentation de NSFetchRequest pour plus d'informations.
Si vous accédez à l'une des propriétés, les données de base iront au magasin persistant et récupéreront le reste de vos valeurs, puis vous obtiendrez la description complète dans les journaux.
Cela semble être un malentendu si commun que j'ai décidé d'écrire à ce sujet, ici .
J'ai rencontré le même problème lors de l'extraction de données de CoreData! Donc, j'ai suivi la façon dont @jrturton l'a instruit et l'ai implémenté dans Swift:
Étape 1: ajoutez
import CoreData
Étape 2: ajoutez le code ci-dessous. .
let context = ( UIApplication.shared.delegate as! AppDelegate ).persistentContainer.viewContext var request = NSFetchRequest<NSFetchRequestResult>() request = Your_Entity_Name.fetchRequest() request.returnsObjectsAsFaults = false do { let arrayOfData = try context.fetch(request) } catch { // Handle the error! }
J'espère que cela vous aidera. :)