У меня есть объект базовых данных для приложения спортивного скоринга. Основная запись называется D_MatchData, а связанная сущность (один-ко-многим) называется D_MatchEvents. Идея в том, что для одного матча можно записать много разных событий. Это все хорошо работает при добавлении и извлечении данных, но я хочу иметь возможность удалить одну запись в D_MatchEvents (предположим, что пользователь записал неправильное событие и хочет «отменить»). Пока мой код выглядит так:
// MARK: - Delete a single match event
class func deleteMatchEvent(_ matchUUID: String) -> Bool {
let fetchRequest = NSFetchRequest<D_MatchEvents>(entityName: "D_MatchEvents")
fetchRequest.predicate = NSPredicate(format: "r_ToData.d_matchUUID == %@", matchUUID)
fetchRequest.returnsObjectsAsFaults = false
do {
var events = try gContext.fetch(fetchRequest)
events.sort { return $0.d_EventSequence < $1.d_EventSequence }
gContext.delete(events[0])
try gContext.save()
for event in events {
print(event.d_EventSequence, event.d_EventTimestamp)
}
} catch {
print(error)
return false
}
return true
}
Я думал о том, чтобы прийти к этому от связанной сущности, используя обратное отношение, чтобы получить только те события для данного совпадения.
Позже я уточню предикат, чтобы получать только те события, которые меня интересуют. Выборка работает нормально (в массив событий), как и сортировка в массиве, но когда я пытаюсь удалить одну строку из этого массива (в этот случай [0], но это может быть любой из них) Я обнаружил, что удаление удаляет все совпадения из базовой базы данных SQLlite - основной записи и всех записей событий.
(gContext является глобальным, который определяет мой MOC)
Я должен что-то здесь упустить. Боюсь, что капризы Core Data все еще приводят меня в замешательство.
Как я могу удалить только одну строку из моей связанной сущности, не удаляя весь мастер и все связанные записи.