不知何故迷失了在其他项目中有效的东西,现在停止了工作。
我有一个控制器 (A)(NSObject 的子类),它有一个用于 kClassCycleQuestionDetails 类实体的 NSFetchedResultsController。我的 ManagedObjectContext 是使用 NSMainQueueConcurrencyType 启动的。
在另一个控制器 (B) 中,我开始插入上述类的实体并开始保存每十个对象。
[self.moc performBlock:^{
[self prepareNewCycle];
}];
上下文发布了 NSManagedObjectContextDidSaveNotification (在 B 中接收),但我从未看到- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
在 A 中调用的控制器委托方法。
两个控制器共享相同的托管对象上下文,所以我应该看到模型更改?!
有没有人有想法。
编辑:为了澄清:prepareNewCycle 将循环实体插入上下文,然后将 kClassCycleQuestionDetails 的实体添加到循环实体(多对关系)。
这是控制器 A 的 fetchedResultsController 的代码
- (NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
/*
Set up the fetched results controller.
*/
// Create the fetch request for the entity
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:kClassCycleQuestionDetails inManagedObjectContext:self.moc];
[fetchRequest setEntity:entity];
// Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:20];
[fetchRequest setPredicate:[self predicateForExamCycleMode:self.cycle.examQuestionModeValue cycleId:self.cycle.cycle_id]];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:kQCQDCycleQuestionDetails_id ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:self.moc
sectionNameKeyPath:nil
cacheName:NSStringFromClass([self class])];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
[NSFetchedResultsController deleteCacheWithName:NSStringFromClass([self class])];
NSError *error = nil;
if (![_fetchedResultsController performFetch:&error]) {
ALog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _fetchedResultsController;
}