在某些情况下只保存NSManagedContext
问题描述:
我需要实现Core Data
对象的取消/保存行为。我有一个UITableView
,我从中获得了来自NSFetchedResultsController
的数据。在某些情况下只保存NSManagedContext
- (void) configureWithCategoryItem: (CategoryItem *) categoryItem
{
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:[CategoryItem entityName]];
request.predicate = [NSPredicate predicateWithFormat:@"categoryId = %@", categoryItem.categoryId];
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES]];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:[CategoryItem defaultContext]
sectionNameKeyPath:@"title"
cacheName:nil];
[self.fetchedResultsController performFetch: NULL];
self.layers = [self categoryLayers];
self.sectionTitle = categoryItem.title;
}
每次点击单元格在这个表视图
LayerItem *layerItem = [self.layers objectAtIndex:indexPath.row];
layerItem.isSelected = [NSNumber numberWithBool:YES];
而在导航栏我有两个按钮: 取消 - 我需要没有结果保存到核心驳回控制器数据, 保存 - 我需要保存结果并关闭控制器
保存方法现在看起来像这样:
- (void) saveChanges
{
NSManagedObjectContext *localContext = self.fetchedResultsController.managedObjectContext;
if ([localContext hasChanges]) {
[localContext save: NULL];
[[NSNotificationCenter defaultCenter] postNotificationName:kEADatabaseWasUpdated object:nil];
}
}
Core Data
有没有一些仪器可以帮我实现这个行为?
我试图单独使用NSManagedObjectContext
和mergeChangesFromContextDidSaveNotification
,但没有收到好结果..等待您的帮助。
答
- (void) cancelChanges
{
NSManagedObjectContext *localContext = self.fetchedResultsController.managedObjectContext;
[localContext rollback];
}