У меня есть основной стек данных, который только явно использует основной контекст и вносит изменения только в / создает постоянные объекты в блоке context.performAndWait.Если мне когда-либо понадобится фоновый контекст, я всегда использую следующий блок кода:
persistentContainer.performBackgroundTask()
{context in
context.performAndWait
{
defer
{
context.save()
persistentContainer.context.save()
}
//make changes here
}
}
Политика слияния основного контекста устанавливается при создании persistentStore, равной NSOverwriteMergePolicy, которая при сохранении фонового контекстаЯ ожидал перезаписать все «старые» объекты в главном контексте любыми «новыми» объектами, созданными в фоновом контексте.Вместо этого происходит ошибка NSConstraintConflict, потому что фоновый контекст использует политику слияния по умолчанию (не знаю почему, я ожидал, что он унаследует политику слияния основного контекста). Когда я явно устанавливаю политику слияния фонового контекстаЯ получаю дубликаты объектов, которые не должны быть дубликатами в соответствии с установленными мною ограничениями.В этом случае атрибут clientID должен быть уникальным для любого данного объекта Client.
Мне кажется, что я как-то неправильно объединяю контексты.Теперь я делаю это, просто сохраняя фоновый контекст, а затем основной контекст, более или менее, как показано выше.Но если я не произвел слияние должным образом, почему возникла ошибка ограничения, если в фоновом контексте есть объекты, которые имеют те же атрибуты, что и объекты в основном контексте?И почему дубликаты появляются, когда я делаю запрос на выборку основного контекста?
У меня всего лишь два месяца на использование основных данных, и все, что я знаю, получено из документации или здесь, так что яконечно, есть кое-что, о чем я просто не знаю.Есть идеи, что я делаю не так?