Удалить объекты (похожие объекты / дубликаты) в coreData - PullRequest
0 голосов
/ 06 марта 2012

В моей сущности есть свойство с именем cardId.
Иногда этот cardId встречается в моей сущности более одного раза.Я хочу удалить эти дубликаты.

Как мне найти эти дубликаты и удалить их?

allObjects = [__fetchedResultsController fetchedObjects];
for (Entity *inbox in allObjects) {

    [managedObjectContext deleteObject:**objectToDelete**];
}

Как мне найти эти похожие объекты?

1 Ответ

1 голос
/ 07 марта 2012

Это всего лишь идея, вы должны разработать ее самостоятельно.

Вы можете указать, чтобы возвращать только отдельные результаты из вашей выборки с setReturnsDistinctResults из NSFetchRequest после указания вашего ключа (cardId) как propertiesToFetch. Таким образом, вы делаете первую выборку всех отдельных объектов и копируете результат в изменяемый массив, который я назову distinctArray. Затем вы делаете вторую выборку, где запрашиваете ВСЕ объекты, таким образом, setReturnsDistinctResults отключено в completeArray. Вы перебираете элементы distinctArray и удаляете каждый элемент из completeArray. То, что остается в completeArray, будет объектами для удаления.

Более низкий уровень реализации этого (возможно, также более эффективного) будет удвоенным для цикла. Вы выбираете только все объекты в completeArray и выполняете старый добрый двойной цикл:

NSMutableArray* objectsToDelete = [[NSMutableArray alloc] initWithCapacity:how_many_duplicates_you_expect];
for (int i = 0; i < [completeArray count]; i++) {
   for (j = i + 1; j < [completeArray count]; j++) {
      MOObject* objecti = [completeArray objectAtIndex:i];
      MOObject* objectj = [completeArray objectAtIndex:j];
      if (objecti.cardId == objectj.cardId) {
          [objectsToDelete addObject:objectj];
      }
   }
 }

В конце будут все объекты, которые будут удалены в objectsToDelete. Обратите внимание, что если в вашей базе данных более двух вхождений одного и того же объекта, могут быть дубликаты даже в objectsToDelete, поэтому проверьте его перед удалением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...