Я создаю программу, в которой иногда перемещаю один якорь на другой
Когда я перемещал эти якоря, я пересчитывал расстояние между двумя якорями (до и после якорей). Вычисление выполняется в фоновом режиме
Я использовал этот стандартный код для обновления
+(void)commit {
// get the moc for this thread
[Tools breakIfLock];
NSManagedObjectContext *moc = [self managedObjectContext];
NSThread *thread = [NSThread currentThread];
DLog(@"threadKey commit%@" , [[self class]threadKey]);
if ([thread isMainThread] == NO) {
// only observe notifications other than the main thread
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(contextDidSave:) name:NSManagedObjectContextDidSaveNotification object:moc];
}
NSError *error;
if (![moc save:&error]) {
CLog(@"Error in Saving %@", error);
DLog(@"What the hell error is it");
}
else{
}
if ([thread isMainThread] == NO) {
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSManagedObjectContextDidSaveNotification object:moc];
}
//[GrabClass StopNetworkActivityIndicatorVisible];
}
+(void)contextDidSave:(NSNotification*)saveNotification {
dispatch_async(dispatch_get_main_queue(), ^{
BadgerNewAppDelegate *delegate = [BNUtilitiesQuick appDelegate];
DLog (@"currentThreadinContextDidSave: %@",[self threadKey]);
NSManagedObjectContext *moc = delegate.managedObjectContext; //delegate for main object
CLog(@"saveNotification : %@",saveNotification);
[moc mergeChangesFromContextDidSaveNotification:saveNotification];
});
//[moc performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:) withObject:saveNotification waitUntilDone:YES];
}
Я ломаю точку и вижу, что расстояния действительно обновляются. Все хорошо
Однако NSFetchedResultsController
fetchedObjects, похоже, не обновляется и все еще использует старое значение.
Как это может быть?
Также
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
DLog(@"controllerWillChangeContent: %@", controller);
[self.tableViewA beginUpdates];
}
никогда не вызывается, хотя NSManagedObjectContext
имеет изменения.
Ну, на самом деле я не был уверен, изменился ли managedObjectContext
или нет. Откуда мне знать? Я имею в виду, что изменятся в managedObjectContext, чтобы гарантировать изменения в fetchController.fetchedObjects
.
Насколько я знаю, кеширования нет. Как я могу быть уверен в этом тоже?