Key data: "NSObjectInaccessibleException" when trying to delete.

Basic data allows me to save, but when I try to delete an object, I get the following error:

*** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0xa6b7e00 <x-coredata://8A687ECB-03F8-47C0-8470-087B9CF032B1-2801-00000A8C9A09CDB7/Notification/p2774005D-4B49-4378-A109-949F15D37032>'

 [self.managedObjectContext executeFetchRequest:allFetchRequest onSuccess:^(NSArray *results) { NSLog(@"Fetch for Objects with origial_id"); if (results.count>0) { NSLog(@"original_id = %@", dlPlanDate.original_id); NSLog(@"Results Recieved %i", results.count); for (PlanDate *pd in results) { PlanDateResolved *pdResolved = [NSEntityDescription insertNewObjectForEntityForName:@"PlanDateResolved" inManagedObjectContext:self.managedObjectContext]; NSArray *keys = [[[pd entity] attributesByName] allKeys]; NSDictionary *dict= [pd dictionaryWithValuesForKeys:keys]; [pdResolved setValuesForKeysWithDictionary:dict]; [pdResolved setValue:[pd plandate_id] forKey:[pdResolved primaryKeyField]]; pdResolved.senderUser = pd.senderUser; pdResolved.objectCreator = pd.objectCreator; pdResolved.users = pd.users; NSLog(@"pd.planDateID %@", pd.plandate_id); [self.managedObjectContext saveOnSuccess:^{ NSLog(@"Saving Each Object in the Array to PlanDateResolved with Original ID"); [self.managedObjectContext deleteObject:pd]; [self.managedObjectContext saveOnSuccess:^{ NSLog(@"Deleted the pd Object object!"); } onFailure:^(NSError *error) { NSLog(@"There was an error Deleting pd Object %@", error); }]; } onFailure:^(NSError *error) { }]; } } } onFailure:^(NSError *error) { NSLog(@"Error fetching: %@", error); }]; } 

Log:

 2013-10-11 11:53:11.175 ST[2801:c07] Fetch for Objects with origial_id 2013-10-11 11:53:11.175 ST[2801:c07] original_id = CFADD5A7-C9E8-48B3-91B2-56FDBC0F9BAB 2013-10-11 11:53:11.175 ST[2801:c07] Results Recieved 3 2013-10-11 11:53:11.180 ST[2801:c07] pd.planDateID CFADD5A7-C9E8-48B3-91B2-56FDBC0F9BAB 2013-10-11 11:53:11.182 ST[2801:c07] pd.planDateID 5917071A-8CFD-4C7C-A60F-A76FA4814429 2013-10-11 11:53:11.183 ST[2801:c07] pd.planDateID 1998BB90-D6FC-4226-977C-3414C4A57078 2013-10-11 11:53:11.913 ST[2801:c07] You updated the Accepted object! 2013-10-11 11:53:11.913 ST[2801:c07] Saving Each Object in the Array to PlanDateResolved with Original ID 2013-10-11 11:53:11.913 ST[2801:c07] Saving Each Object in the Array to PlanDateResolved with Original ID 2013-10-11 11:53:12.155 ST[2801:c07] Saving Each Object in the Array to PlanDateResolved with Original ID 2013-10-11 11:53:35.482 ST[2801:c07] *** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0xa6b7e00 <x-coredata://8A687ECB-03F8-47C0-8470-087B9CF032B1-2801-00000A8C9A09CDB7/Notification/p2774005D-4B49-4378-A109-949F15D37032>'' *** First throw call stack: (0x24e7012 0x1cfae7e 0x1a20a48 0x1a515e8 0x1ac2879 0x1a59627 0x1a59271 0x1ace025 0x1a53cc1 0x1e7f014 0x1e6ed5f 0x1e6eaa3 0x1a53c8b 0x1a53aee 0x1a30eac 0x1ab0c1 0x1a5398f 0x1e7f014 0x1e6f7d5 0x248daf5 0x248cf44 0x248ce1b 0x24027e3 0x2402668 0x92effc 0x418d 0x25c5) libc++abi.dylib: terminate called throwing an exception 0x1ace025 0x1a53cc1 0x1e7f014 0x1e6ed5f 0x1e6eaa3 0x1a53c8b 0x1a53aee 0x1a30eac 0x1ab0c1 0x1a5398f 0x1e7f014 0x1e6f7d5 0x248daf5 0x248cf44 0x248ce1b 0x24027e3 0x2402668 0x92effc 0x418d 0x25c5) 2013-10-11 11:53:11.175 ST[2801:c07] Fetch for Objects with origial_id 2013-10-11 11:53:11.175 ST[2801:c07] original_id = CFADD5A7-C9E8-48B3-91B2-56FDBC0F9BAB 2013-10-11 11:53:11.175 ST[2801:c07] Results Recieved 3 2013-10-11 11:53:11.180 ST[2801:c07] pd.planDateID CFADD5A7-C9E8-48B3-91B2-56FDBC0F9BAB 2013-10-11 11:53:11.182 ST[2801:c07] pd.planDateID 5917071A-8CFD-4C7C-A60F-A76FA4814429 2013-10-11 11:53:11.183 ST[2801:c07] pd.planDateID 1998BB90-D6FC-4226-977C-3414C4A57078 2013-10-11 11:53:11.913 ST[2801:c07] You updated the Accepted object! 2013-10-11 11:53:11.913 ST[2801:c07] Saving Each Object in the Array to PlanDateResolved with Original ID 2013-10-11 11:53:11.913 ST[2801:c07] Saving Each Object in the Array to PlanDateResolved with Original ID 2013-10-11 11:53:12.155 ST[2801:c07] Saving Each Object in the Array to PlanDateResolved with Original ID 2013-10-11 11:53:35.482 ST[2801:c07] *** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0xa6b7e00 <x-coredata://8A687ECB-03F8-47C0-8470-087B9CF032B1-2801-00000A8C9A09CDB7/Notification/p2774005D-4B49-4378-A109-949F15D37032>'' *** First throw call stack: (0x24e7012 0x1cfae7e 0x1a20a48 0x1a515e8 0x1ac2879 0x1a59627 0x1a59271 0x1ace025 0x1a53cc1 0x1e7f014 0x1e6ed5f 0x1e6eaa3 0x1a53c8b 0x1a53aee 0x1a30eac 0x1ab0c1 0x1a5398f 0x1e7f014 0x1e6f7d5 0x248daf5 0x248cf44 0x248ce1b 0x24027e3 0x2402668 0x92effc 0x418d 0x25c5) libc++abi.dylib: terminate called throwing an exception 
+6
source share
4 answers

When a managed object is not available , this means that Core Data could not find this object in the persistent file. There may be several reasons.

I don’t know where executeFetchRequest:onSuccess: and saveOnSuccess: , but assuming that they do what their method names mean (and they are not terribly wrong), there is no obvious reason in the code why this happens. So this happens as a side effect of the work you do elsewhere.

Most likely: you also delete these objects elsewhere, and this deletion happens sometime after the selection, but before the code works. As a result, they already disappeared when the code above tries to delete them. It seems that the secret Core Data methods you use are executed asynchronously (based on the fact that you get pd.planDateID repeatedly printed before reaching the crash point), so this can be either in the same thread or in another thread.

[All of this assumes that your journal entries actually came from the code you posted. This is somewhat questionable, because there is a message in the logs that says β€œYou updated the received object!”, Which does not appear in the code.]

+13
source

I agree with Tom Harrington on the root issue. It’s also good to know that with iOS 9 this behavior has changed . There is no NSObjectInaccessibleException on iOS 9, but a CoreData warning will be thrown, for example:

 CoreData: warning: An NSManagedObjectContext delegate overrode fault handling behavior to silently delete the object with ID '0xd0000000025c0006 <x-coredata://336D9F02-727B-42C5-AEDD-8007D4AB521D/Film/p151>' and substitute nil/0 for all property values instead of throwing. 2015-09-10 15:27:09.799 PROJECTX[2141:818058] CoreData: error: Mutating a managed object 0xd0000000025c0006 <x-coredata://336D9F02-727B-42C5-AEDD- 8007D4AB521D/Bla/p151> (0x12812bea0) after it has been removed from its context. 

This will not crash, but lead to ambiguous application behavior.

+8
source

Look at the timestamp of your error. Obviously, you tried to access the remote managed entity somewhere else, quite a bit later. Tom and Ray explain correctly. The object is unavailable because it is not in persistent storage.

You should check your code where you can still have references to the managed object, and make sure that you are not trying to access it after deleting it.

+2
source

This usually happens if you try to access NSManagedObject in the wrong NSManagedObjectContext. If you are using a managed object from a user interface thread (to directly display data or manipulate the main thread), you need to use the NSMainQueueConcurrencyType concurrency.

Also, if you are using an object in a background thread, it should be a chile context with an NSPrivateQueueConcurrencyType concurrency.

+2
source

Source: https://habr.com/ru/post/955813/


All Articles