在MagicalRecord中删除实体不是持久的

我有一个与MagicalRecord奇怪的问题。 删除将不会持续。 当我删除,NSFetchedResultsControllerDelegate正确地看到该对象已被删除。 但是,如果我closures并重新打开应用程序,该实体重新出现。

我用来删除实体的代码是:

ActivityType *activityType = [_fetchedResultsController objectAtIndexPath:indexPath]; [activityType deleteInContext:[NSManagedObjectContext MR_defaultContext]]; [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait]; 

我用来设置NSFetchedResultsController的代码是:

 NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"ActivityType" inManagedObjectContext:[NSManagedObjectContext defaultContext]]; [fetchRequest setEntity:entity]; NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]]; NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[NSManagedObjectContext defaultContext] sectionNameKeyPath:nil cacheName:@"activityTypes"]; _fetchedResultsController = theFetchedResultsController; _fetchedResultsController.delegate = self; 

基于其他SO职位,我也尝试在设置和删除(但无济于事)中使用[NSManagedObjectContext rootSavingContext]

我经历了一些核心数据,我学到了一些东西。 我累了,所以我只写一个简短的总结。

  1. 当你删除一个实体时,核心数据可能会因为删除规则而拒绝它。 为什么我的删除没有通过是因为它需要级联,但它是无效的。 我认为这与离开的实体被遗弃有关。 我不知道这是为什么会阻止删除,但这是我的情况。 我发现它的方式是通过日志,我看到一些关于引用的依赖实体的声明,我意识到删除规则将适用。

  2. 当日志中提到有关严重错误和听众的情况时,请检查FRC代码。 既然这是听者,你的罪魁祸首就会在这里。 在我的情况下,我禁用了[tableview beginUpdates]和[tableview endupdates]。 FRC实际上需要这个(我认为这是可选的)。 否则,你会得到一些关于不一致性和managedobjectcontextlistener的错误,以及如何添加或删除行等。

  3. 当你删除,它实际上可能被保存到内存本地上下文,但可能不会被保存到持久性存储。 这意味着FRC委托代码将看到更改,但可能无法保存。 此外,内存存储可能不会执行删除规则检查,因为它通过我的。 但持久性商店将做检查。 得多看看这个。