2011-09-05 3 views
95

J'essaie de sortir des données de CoreData avec le code suivantCoreData erreur « données: <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 devrait avoir 9 objets correspondants et il trouve les 9 objets. Donc, le prédicat devrait fonctionner mais j'obtenir 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>)" 
) 

Il travaillait prefectly bien jusqu'à ce que je l'ai fait le changement suivant dans Cave.m qui est l'entité

J'ai ajouté MKAnnotation en tant que délégué 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; 
} 

Y at-il un moyen de déboguer cela?

Répondre

244

Ce comportement est normal, les données de base ne seront pas retourner des objets complets jusqu'à ce que vous avez 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 de retourner des objets à l'aide de plein [request setReturnsObjectsAsFaults:NO], mais dans la plupart des cas ce que vous avez sera très bien. Regardez 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 chercher le reste de vos valeurs, vous obtiendrez la description complète dans les journaux.

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

+54

vous pouvez désactiver la propriété en appelant [request setReturnsObjectsAsFaults: NO]; –

+1

Merci! C'était facile :) – ElizaS

+1

lifesaver mate, merci! – Vlad

2

J'ai fait face au même problème en tirant des données de CoreData! Donc, j'ai suivi la méthode @jrturton et je l'ai implémenté dans Swift 3.

Étape 1: Ajouter 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 
let arrayOfData = try context.fetch(request) 

Hope, il vous aidera. :)

Questions connexes