删除核心数据swift3中每个实体中的所有数据

时间:2017-05-09 06:51:39

标签: ios core-data swift3

在核心数据中,我有10个实体如下:

 + User
    - x
    - xx
 + Store
    - a
    - aa
 + Point
    - n
    - nn
 + ....

以及如何删除核心数据中用户,商店,点和....的所有项目

2 个答案:

答案 0 :(得分:0)

您可以从context.persistentStoreCoordinator.managedObjectModel.entities获取上下文中的所有实体类型(在您的情况下为User,Store,Point等)。接下来,对于每个实体,您可以生成获取请求以获取所有实体和然后删除每一个。这还将更新监视上下文的所有FetchedResultsController。如果您不需要,更快的方法是为每个实体使用NSBatchDeleteRequest。不要忘记最后将更改保存到上下文中。

答案 1 :(得分:0)

如果删除PersistentStoreCoordinator或Managedobjectmodel,则很有可能会出现persistentStoreCoordinator冲突和异常。

所以我所做的是从coredata中删除了所有实体和对象,而没有形成新的PersistentStoreCoordinator。

- (void)deleteDatabase{
    NSArray *entities = self.managedObjectModel.entities;
    for (NSEntityDescription *entityDescription in entities) {
        [self deleteAllObjectsWithEntityName:entityDescription.name inContext:[APPDELEGATE managedObjectContext]]; // Passing the entity name and context. 
    }
}

- (void)deleteAllObjectsWithEntityName:(NSString *)entityName inContext:(NSManagedObjectContext *)context
{
    NSFetchRequest *fetchRequest =
    [NSFetchRequest fetchRequestWithEntityName:entityName];
    fetchRequest.includesPropertyValues = NO;
    fetchRequest.includesSubentities = NO;

    NSError *error;
    NSArray *items = [context executeFetchRequest:fetchRequest error:&error];

    for (NSManagedObject *managedObject in items) {
        [context deleteObject:managedObject];
    }
}

使用[self deleteDatabase];来调用该方法。