Coredata Error "data: <fault>"
IphoneCore DataIphone Problem Overview
I try to pull out data from CoreData with the following code
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 should have 9 matching objects and it finds the 9 objects. So the predicate should work but I get this in the 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>)"
)
It used to work prefectly fine until I did the following change in Cave.m which is the Entity
I added MKAnnotation as a delegate in Cave.h and added this code in Cave.m
- (CLLocationCoordinate2D)coordinate
{
CLLocationCoordinate2D location;
location.latitude = [self.latitude doubleValue];
location.longitude = [self.longitude doubleValue];
return location;
}
Is there a way to debug this?
Iphone Solutions
Solution 1 - Iphone
This is expected behaviour, core data won't return full objects until you need to access the persistent values of the objects. Each of your returned objects will be a 'fault' until this point.
You can force the fetch request to return full objects using [request setReturnsObjectsAsFaults:NO]
, but in most cases what you have will be fine. Look at the documentation for NSFetchRequest for more information.
If you access one of the properties, core data will go to the persistent store and fetch the rest of your values, then you'll get the full description in the logs.
This seems to be such a common misunderstanding that I decided to write about it, here.
Solution 2 - Iphone
I faced the same problem while pulling data from CoreData ! So, I followed the way @jrturton instructed and implemented it in Swift 3:
> Step 1 : Add import CoreData
>
> Step 2 : Add the code below . .
>
> let context = ( UIApplication.shared.delegate as! AppDelegate ).persistentContainer.viewContext
> var request = NSFetchRequest
Hope , it will help you . :)