Хотя этот вопрос старый, на самом деле он находится в верхней части результатов поиска Google по теме «Поток NSMangedObjectContext», поэтому я просто добавлю новый ответ.
Новый «предпочтительный» метод состоит в том, чтобы использовать initWithConcurrencyType: и сообщить MOC, является ли это MOC основного потока или moc вторичного потока. Затем вы можете использовать новые методы executeBlock: и executeBlockAndWait: и MOC позаботится о сериализации операций в своем «нативном» потоке.
Тогда возникает вопрос, как вы разумно справляетесь с объединением данных между различными MOC, которые может породить ваше приложение, наряду с тысячами других деталей, которые делают жизнь программиста «забавной».