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

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

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

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

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

3 ответа

Решение

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

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

Джон

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

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

Другие вопросы по тегам