删除coreData中的对象(类似对象/重复项)

时间:2012-03-06 15:05:06

标签: core-data duplicates nsfetchedresultscontroller

我的实体中有一个名为cardId的属性 有时候这个cardId在我的实体中更多一次。我想删除这些副本。

如何找到这些副本并将其删除?

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

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

我如何找到这些相似的物体?

1 个答案:

答案 0 :(得分:1)

以下只是一个想法,你必须自己详细说明。

您可以指定在将密钥(cardId)指定为setReturnsDistinctResults后,仅使用NSFetchRequest 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中也可能存在重复项,因此请在删除之前进行检查。

相关问题