Question

For a recent update to an app, I am seeing many crash logs with the error that core data could not fulfill a fault. But nowhere in the app (startup, or elsewhere) did I delete the objects whose faults cannot be fulfilled, nor would they have been cascade deleted. How else can this error be happening? And is there a way to catch it and fix it within the live app?

Could it also be if you added but did not properly save the object yet?

Was it helpful?

Solution

It is possible that an object that was not "properly" saved to cause this behaviour.

One way to do that is:

  • Insert an object in a child context
  • obtain a permanent ID for that object
  • save to the parent context
  • obtain the object in the parent context
  • refresh the object in the parent context
  • access the object in the parent context (fulfil a fault for that object)

Edit:

Another way to reach this state in a single context architecture is:

  • Insert an object
  • obtain a permanent id for the object
  • refresh the object
  • try and access the object (trigger a fault on the object)

the refresh might be a result of a fetched results controller paging through the data and not necessarily something "visible" in your application.

In addition, there is a CoreData "bug" that not always allows you to catch this exception in a parent-child context architecture, but you can try ...

However, if this is the scenario you encounter, this is not a desired behaviour for your application. you are loosing the new data added to the store.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top