我有一个UICollectionView,需要在模型更改时更新。
订阅通知中心是为了这样做:
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(modeloActualizado:) name:NSManagedObjectContextObjectsDidChangeNotification object:self.contexto];
}
UICollectionViewController通过NSFetchedResultsController连接到模型,NSFetchedResultsController用于返回“ocupada”值为1的实体“Plaza”列表(它是一个布尔值)。
-(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中直到App关闭并再次打开。
我做错了吗?我不知道为什么NSFetchedResultsController返回相同数量的对象,即使其中一个对象不再与谓词条件匹配。
有什么想法吗?
提前致谢。