删除MagicalRecord中的实体不会持久化

Ed *_*hin 2 core-data ios magicalrecord

我和MagicalRecord有一个奇怪的问题.删除不会持久.当我删除时,NSFetchedResultsControllerDelegate正确地看到该对象已被删除.但是,如果我关闭并重新打开应用程序,则实体会重新出现.

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

ActivityType *activityType = [_fetchedResultsController objectAtIndexPath:indexPath];
[activityType deleteInContext:[NSManagedObjectContext MR_defaultContext]];
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];
Run Code Online (Sandbox Code Playgroud)

我用来设置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;
Run Code Online (Sandbox Code Playgroud)

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

Ed *_*hin 6

我经历过地狱和核心数据,我学到了一些东西.我很累,所以我只想写一个快速摘要.

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

  2. 当日志说明严重错误和监听器时,请检查FRC代码.由于这是听众,你的罪魁祸首代码将在这里.就我而言,我禁用了[tableview beginUpdates]和[tableview endupdates].FRC实际上需要这个(我认为它是可选的).否则,您会收到有关不一致和managedobjectcontextlistener的错误,以及如何添加或删除行等等.

  3. 删除时,它实际上可能会保存到内存本地上下文中,但可能无法保存到持久性存储中.这意味着FRC委托代码将看到更改,但可能无法保存.此外,内存存储可能不会执行删除规则检查,因为它通过我的.但持久性商店将进行检查.我必须更多地研究这个问题.