Cocoa -Touch, Core Data: как удалить все объекты для объекта?

У меня есть приложение, использующее Core Data с хранилищем SQLite.

В какой-то момент я хотел бы удалить все объекты для нескольких объектов. Там может быть около тысячи объектов.

Из того, что я могу сказать через google и официальные документы, единственный способ удалить объекты - [managedObjectContext deleteObject:(Entity *)] для каждого объекта. Но это означает, что я должен сначала извлечь все объекты.

Хранилище данных просто sqlite, нет ли способа передать ему TRUNCATE TABLE ZENTITY;?

Ответ 1

Проблема в том, что CoreData - это не просто оболочка SQLite. Это решение управления графами объектов и хранит в кэше версии вашего объекта в памяти в дополнение к другим материалам. Насколько я знаю, чтобы удалить все экземпляры данного управляемого объекта, вам придется их извлекать, а затем удалять каждый. Это не означает, что эта функциональность не должна существовать, потому что она, вероятно, должна.

Ответ 2

Если вы связываете свои объекты с родительским объектом, просто удалите родителя. Если у ваших родителей правило удаления установлено на "каскад", все эти (1k) дети также будут удалены.

Джон

Ответ 3

Вы действительно попробовали это и обнаружили, что это проблема производительности? Если это так, то вы можете предоставить некоторую информацию, показывающую это, и, что более важно, сообщить об ошибке. Если нет, то почему вы беспокоитесь о том, чтобы спросить?

Это не так просто, как сделать TRUNCATE TABLE ZENTITY;, так как Core Data также должны применять правило удаления для каждого объекта (среди других действий), что означает выполнение выборки. Таким образом, они могут также позволить вам сделать выборку, а затем передавать результаты в контекст один за другим.