2015-08-25 5 views
3

Я искал сообщений относительно этого, но я не до конца понимаю ... В чем разница между:Очистка контекста в базовых данных: сброс и удаление зарегистрированных объектов?

[context reset]; 

и:

for (NSManagedObjectID *objId in objectIds) { 
    [context deleteObject:[context objectWithID:objId]]; 
} 

Или они эквивалентны?

Благодаря

+0

Ну, для одного, сброс затрагивает ВСЕ, а deleteObject позволяет удалить один объект SINGLE. –

+0

@LordZsolt, но при условии, что вы зацикливаете все зарегистрированные объекты контекста ... это то же самое? – AppsDev

+0

Проверьте что-то: добавьте 10 объектов к основным данным и сохраните их. После этого измените код на сброс вызова (после сохранения объектов в постоянном хранилище). Теперь посмотрите, извлекаете ли вы все объекты, у вас все еще есть или они были удалены. Я знаю, что 'deleteObject:' также удаляет объекты из постоянного хранилища, однако я не знаю, может ли сброс это или только удалить объекты, которые находятся в NSManagedObjectContext. Извините, что я не пишу его сам, однако у меня нет приложения с CoreData, готового на данный момент. –

ответ

19

Использования reset помещает контекст управляемого объекта в состояние, в котором он был, когда вы впервые создали it--, прежде чем вы совершили какие-либо выборки, но и создали новые объекты и т.д. Если у вас есть какие-либо управляемые объекты в памяти, которые были извлечены из этого контекста, теперь они непригодны для использования. Использование resetне влияет на файл постоянного хранилища. После этого все экземпляры все еще существуют, они просто не в памяти. Их можно вернуть снова.

Использование deleteObject удаляет объект из стойкого хранилища. Этого больше не существует. Его больше нельзя получить, потому что его не существует.

+0

Спасибо. Я делаю несколько тестов, и я не знаю, почему после вызова 'deleteObject:' для всех зарегистрированных объектов в контексте, я все еще их в постоянном хранилище, а 'context.registeredObjects.count' все еще есть> 0. Если я вызываю '[context reset]', то 'context.registeredObjects.count' равно 0, как я ожидал ... почему это могло произойти? – AppsDev

+2

Вы сохранили изменения? –

+0

@AppsDev вам нужно вызвать save в контексте, чтобы избавиться от них. – LightningStryk