我的实体中有一个名为cardId的属性 有时候这个cardId在我的实体中更多一次。我想删除这些副本。
如何找到这些副本并将其删除?
allObjects = [__fetchedResultsController fetchedObjects];
for (Entity *inbox in allObjects) {
[managedObjectContext deleteObject:**objectToDelete**];
}
我如何找到这些相似的物体?
答案 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
中也可能存在重复项,因此请在删除之前进行检查。