1

我有一个 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 返回相同数量的对象,即使其中一个不再与谓词条件匹配。

有任何想法吗?

提前致谢。

4

0 回答 0