Ios 更新NSManagedObjectContext 请考虑这个问题的结尾处的方法。它尝试从CoreData实体中删除所有记录

Ios 更新NSManagedObjectContext 请考虑这个问题的结尾处的方法。它尝试从CoreData实体中删除所有记录,ios,objective-c,core-data,Ios,Objective C,Core Data,第一部分很好:它从我的上下文中删除所有内容,然后保存上下文 第二个未注释的部分似乎不起作用: 作为一个测试,我做了 NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"myEntity"]; NSError *error = nil; NSArray *results = [self.managedObjectContext executeFetchRequest:request error

第一部分很好:它从我的上下文中删除所有内容,然后保存上下文

第二个未注释的部分似乎不起作用: 作为一个测试,我做了

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"myEntity"];
    NSError *error = nil;
    NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];
    NSLog(@"Fetch request returns %lu objects", (unsigned long)[results count]);
当我使用下面的方法添加记录并删除所有记录时,记录的数量只会增加

据我所知,它实际上是有效的,但是上下文还没有意识到它

因此,为了获得可靠的上下文,我应该使用

[NSManagedObjectContext mergeChangesFromRemoteContextSave:<#(nonnull NSDictionary *)#> intoContexts:self.managedObjectContext];

您确实使用batchDeleteRequest在上下文中调用了
executeRequest
,不是吗?您确实使用batchDeleteRequest在上下文中调用了
executeRequest
,不是吗?
- (void)deleteAllEntities:(NSString *)nameEntity
    {

        id appDelegate = (id)[[UIApplication sharedApplication] delegate];
        self.managedObjectContext= [appDelegate managedObjectContext];

        /*
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:nameEntity];
        [fetchRequest setIncludesPropertyValues:NO]; //only fetch the managedObjectID

        NSError *error;
        NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
        for (NSManagedObject *object in fetchedObjects)
        {
            [self.managedObjectContext deleteObject:object];
        }

        error = nil;
        [self.managedObjectContext save:&error];
        */


        NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:nameEntity];
        NSBatchDeleteRequest *delete = [[NSBatchDeleteRequest alloc] initWithFetchRequest:request];

        NSError *deleteError = nil;


    }