モデルが変更されたときに更新する必要がある UICollectionView があります。
そうするために、通知センターに登録されます。
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(modeloActualizado:) name:NSManagedObjectContextObjectsDidChangeNotification object:self.contexto];
}
UICollectionViewController は、「ocupada」値が 1 (ブール値) であるエンティティ「Plaza」のリストを返すことを意図した NSFetchedResultsController を介してモデルに接続します。
-(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 に表示され、再び開いた。
私は何か間違ったことをしていますか?オブジェクトの 1 つが述語条件に一致しなくなったにもかかわらず、NSFetchedResultsController が同じ量のオブジェクトを返す理由がわかりません。
何か案は?
前もって感謝します。