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

Posted

技术标签:

【中文标题】删除核心数据swift3中每个实体中的所有数据【英文标题】:Delete all data in each of entity in core data swift3 【发布时间】:2017-05-09 06:51:38 【问题描述】:

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

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

以及如何在核心数据中删除 User、Store、Point 和 .... 中的所有项目

【问题讨论】:

一个非常相似的问题:core-data-quickest-way-to-delete-all-instances-of-an-entity. 非常感谢 【参考方案1】:

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

【讨论】:

【参考方案2】:

如果您删除 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]; 调用该方法。

【讨论】:

以上是关于删除核心数据swift3中每个实体中的所有数据的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:如何删除关系中的实体

如何从核心数据中的实体中获取所有项目的列表,每个项目只出现一次?

在数据迁移期间删除实体中的所有记录

我的核心数据数据模型中的一个实体没有被删除

删除表格视图中的一行而不删除核心数据实体

在 Swift 2 中删除实体的核心数据