Я использую sqlite для Core Data в качестве бэкэнд. Кажется, что когда вы устанавливаете 'on delete' для отношения сущности как 'cascade', данные ядра не используют бэкэнд для удаления. Основные данные упрощают удаление всех относительных данных в цикле. Это дает мне дополнительную задержку, когда я пытаюсь удалить объект с огромным количеством относительных объектов. Во-первых, он выполняет все относительные объекты ошибки, после чего удаляет их по одному. Я вижу это из журнала.«Правило удаления данных ядра» для отношений не ретранслируется на бэкэнд?
Я думал, что если я использую sqlite в качестве базы данных Core Data, правило удаления «каскада» будет выполнено с помощью sqlite «create table statement».
Я пропустил? Есть ли возможность заставить Core Data использовать каскадное удаление на базе sqlite?
UPD:
Как @Mundi предложил. Я разрешил его следующим образом:
- Set удалить правило «Нет действий» для лица (это называется Project) , который имеет много относительных объектов (более 10K)
- Продлить сущности проекта с опорой.
- Вместо удаления я установил Project.isDeleted 1.
- Всех виды фильтруются с Предикатным IsDeleted эк 0.
- Создайте фоновую задачу, которая запуск каждые 10 секунд (перестраиваемую) и удалить проекты с пропом isDelete эк- и его относительные объекты
фоновая задача делает удаление следующим образом: выборки
- Exec (IsDeleted = 1), чтобы получить проекты, чтобы удалить с setLimit эк 3 (перестраиваемого)
- Exec пакет извлекает все относительные объекты для удаления.
- Удалить все относительные объекты в цикле + сохранить после размера партии. Если здесь происходит плохое, мы можем продолжить в другом прогоне. Здесь я даже останавливаю задачу, если пользователь хочет закрыть приложение.
- Удалить проект и сохранить.
Выделение исключений - отличная идея, но имейте в виду компромиссы атомарности, присущие там. (Что произойдет, если приложение выйдет из строя через пару пакетов? Они не будут удалены.) IOS 8 имеет определенные API для решения таких проблем: http://code.tutsplus.com/tutorials/ios-8-core- data-and-batch-updates - cms-22164 –
Хорошая точка.Это может быть устранено путем поиска блуждающих объектов в начале приложения для их удаления. Кроме того, я не уверен, что Core Data очистит это с помощью каскадного правила в сценарии прерывания, которое вы укажете – Mundi
@ AndyRiordan Надеюсь, что я преодолел проблему с сбоями между партиями, см. Обновления. – sim