Про использование CoreData в многопоточном приложении: ошибка может проявиться не сразу — например, на 500-м объекте NSManagedObject, созданном и переданном из потока загрузки в основной поток из callback-а NSURLSession
«NSManagedObject instances are not intended to be passed between queues. Doing so can result in corruption of the data and termination of the application.»
«Экземпляры класса NSManagedObject не предполагаются быть переданными между очередями. Это может привести к нарушению данных и завершению приложения.»
«Create a separate managed object context for each thread and share a single persistent store coordinator.»
«Создавайте отдельный контекст управляемых объектов (managed object context) для каждого потока и используйте [в этих контекстах] один общий координатор постоянного хранилища (persistent store coordinator).»
Решение в этих статьях несколько отличается от примера в упомянутой выше документации (статьи 2010 года) — в документации используется parentContext и performBlock
Спасибо за комментарий, но каким боком это к статье? Многопоточность здесь вообще не рассматривается, тем более передача объектов между различными потоками.
Статья замечательная, спасибо за нее. К сожалению не могу оставлять комментарии на первую часть, по этому решил отметить важный (по моему мнению) вопрос, в дополнение к отмеченному ранее «в общем случае, может быть несколько контекстов». Кому-то может помочь при проектировании приложения.
Core Data + Swift для самых маленьких: необходимый минимум (часть 2)