Основные данные IOS, как реализовать функцию транзакции SQL? - PullRequest
7 голосов
/ 16 марта 2012

как заголовок.Я использую основные данные для вставки элемента, я вставляю 100 элементов, это слишком медленно.Как увеличить скорость вставки?Базовые данные, которые имеют функцию транзакции?

Ответы [ 2 ]

6 голосов
/ 11 марта 2013
[[<#NSManagedObjectContext#> undoManager] beginUndoGrouping];
... do some data modifications ....
[[<#NSManagedObjectContext#> undoManager] endUndoGrouping];

[[<#NSManagedObjectContext#> undoManager] undo]; // rollback
...
5 голосов
/ 16 марта 2012

Вы ищете save в Базовых данных после того, как все 100 объектов были вставлены, а не после каждой вставки.

Когда объекты вставляются в базовые данные, они присутствуют только в памяти. Чтобы сохранить новые объекты на диске, вы должны сохранить все изменения (вставки, обновления и удаления) и записать их вместе на диск.


Если вы посмотрите на документацию для -insertObject (ниже), вы можете прочитать, что вставка объекта регистрирует объект только для вставки при сохранении изменений.

insertObject:

Регистрирует объект для вставки в постоянное хранилище получателя при следующем сохранении изменений.

- (void)insertObject:(NSManagedObject *)object

Параметры

объект

Управляемый объект.

Посмотрев далее документацию для -save: (ниже), вы поймете, что он (попытается) сохранить все несохраненные изменения, в вашем случае все 100 вставлено товар.

сохранить:

Пытается зафиксировать несохраненные изменения в зарегистрированных объектах в их постоянном хранилище.

- (BOOL)save:(NSError **)error

Параметры

ошибка

Указатель на NSError объект. Вам не нужно создавать объект NSError. Операция сохранения прерывается после первого сбоя, если вы передаете NULL.

Возвращаемое значение

YES если сохранение выполнено успешно, в противном случае NO.

...