J’essaie de retirer les 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 devrait avoir 9 objects correspondants et trouver les 9 objects. Donc, le prédicat devrait fonctionner mais je l’obtiens dans la console
2011-09-05 07:41:42.267 CaveConditions[6930:11903] ( " (entity: Cave; id: 0x7367880 ; data: )", " (entity: Cave; id: 0x7356e20 ; data: )", " (entity: Cave; id: 0x7363e60 ; data: )", " (entity: Cave; id: 0x7356be0 ; data: )", " (entity: Cave; id: 0x733ad80 ; data: )", " (entity: Cave; id: 0x7333e70 ; data: )", " (entity: Cave; id: 0x7361810 ; data: )", " (entity: Cave; id: 0x7360110 ; data: )", " (entity: Cave; id: 0x73303c0 ; data: )" )
Il fonctionnait parfaitement bien jusqu’à ce que je fasse le changement suivant dans Cave.m qui est l’entité
J’ai ajouté MKAnnotation comme 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; }
Est-il possible de déboguer ceci?
Ce comportement est attendu, les données de base ne renvoient pas d’objects complets tant que vous n’avez pas besoin d’accéder aux valeurs persistantes des objects. Chacun de vos objects retournés sera un “défaut” jusqu’à ce point.
Vous pouvez forcer la requête d’extraction à renvoyer des objects complets à l’aide de [request setReturnsObjectsAsFaults:NO]
, mais dans la plupart des cas, tout ira 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 récupèreront le rest de vos valeurs, puis vous obtiendrez la description complète dans les journaux.
Cela semble être un tel malentendu que j’ai décidé d’écrire à ce sujet ici .
J’ai rencontré le même problème en tirant des données de CoreData! Donc, j’ai suivi la voie donnée par @jrturton et mise en œuvre 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
() request = Your_Entity_Name.fetchRequest() request.returnsObjectsAsFaults = false do { let arrayOfData = try context.fetch(request) } catch { // Handle the error! }
J’espère que ça vous aidera. 🙂