Have your data manager class make all the relevant Core Data calls with performBlock:
or performBlock:andWait:
That way the calls will always be made in a thread safe manner.
Personally, however, I usually write my data manager so that It is called on the main thread, and it takes care of making any further calls on whatever thread makes sense.