我有一个 UICollectionView 需要在模型更改时更新。
它订阅了通知中心以便这样做:
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(modeloActualizado:) name:NSManagedObjectContextObjectsDidChangeNotification object:self.contexto];
}
UICollectionViewController 通过 NSFetchedResultsController 连接到模型,该 NSFetchedResultsController 旨在返回实体“Plaza”的列表,其“ocupada”值为 1(它是一个布尔值)。
-(NSFetchedResultsController*) frController{
if(_frController == nil){
NSFetchRequest *request = [[NSFetchRequest alloc]init];
NSEntityDescription *entidad = [NSEntityDescription entityForName:@"Plaza" inManagedObjectContext:self.contexto];
request.entity = entidad;
request.fetchBatchSize = 10;
// Añadir un predicado para filtrar por plazas ocupadas
request.predicate = [NSPredicate predicateWithFormat:@"ocupada == 1"];//%@",[NSNumber numberWithBool:YES]];
// Ordenar por numero de plaza
NSSortDescriptor *ordenPorNumero = [[NSSortDescriptor alloc] initWithKey:@"numero" ascending:YES];
NSArray *descriptores = [[NSArray alloc] initWithObjects:ordenPorNumero, nil];
[request setSortDescriptors:descriptores];
// Crear el FetchedResultsController
//[NSFetchedResultsController deleteCacheWithName:@"Coleccion"];
_frController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.contexto sectionNameKeyPath:nil cacheName:@"Coleccion"];
_frController.delegate = self;
NSError *error = nil;
if(![self.frController performFetch:&error]){
NSLog(@"Ha ocurrido un error: %@ %@",error,[error userInfo]);
abort();
}
}
return _frController;
}
模型更改时调用的方法会重新加载 CollectionView 数据:
-(void)modeloActualizado:(NSNotification *) notificacion{
[self.collectionView reloadData];
}
问题是,如果我更改实体的任何值,这些更改会显示在 CollectionView 中,但如果我将实体布尔值“ocupada”更改为 NO,它仍会出现在 CollectionView 中,直到应用程序关闭并且再次打开。
难道我做错了什么?我不知道为什么 NSFetchedResultsController 返回相同数量的对象,即使其中一个不再与谓词条件匹配。
有任何想法吗?
提前致谢。