1

モデルが変更されたときに更新する必要がある 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 が同じ量のオブジェクトを返す理由がわかりません。

何か案は?

前もって感謝します。

4

0 に答える 0