代码之家  ›  专栏  ›  技术社区  ›  Oh Danny Boy

保存结果控制器刷新刷新刷新?

  •  9
  • Oh Danny Boy  · 技术社区  · 14 年前

    我想使用另一个谓词从nsfetchedresultsController中重新提取数据,该谓词是使用布尔值设置的。如何刷新nsfetchedresultsController以获取新的数据集?

    - (void)refreshFetchedResultsController {
        NSLog(@"refreshFetchedResultsController");
    
        NSError *error = nil;
        if (![[self fetchedResultsController] performFetch:&error]) {
            UIAlertView *alert = [[UIAlertView alloc]
                                  initWithTitle:NSLocalizedString(@"Error loading data",
                                                                  @"Error loading data")
                                  message:[NSString stringWithFormat:
    
    
    
                                       NSLocalizedString(@"Error was: %@, quitting.", @"Error was: %@, quitting."),
                                       [error localizedDescription]]
                              delegate:self
                              cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel")
                              otherButtonTitles:nil];
        [alert show];
    }
    

    }

    哪些调用

    - (NSFetchedResultsController *)fetchedResultsController {
        if (_fetchedResultsController != nil) {
            NSLog(@"i was executed.");
            return _fetchedResultsController;
        }
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        TapAppDelegate *appDelegate = (TapAppDelegate *)[[UIApplication sharedApplication] delegate];
        NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"Favorite" inManagedObjectContext:managedObjectContext];
    
        NSString *sectionKey = @"favname";
        NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"favname" ascending:YES];
        NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    
    
        if(showAll == NO){
            if(isXSelected == NO){
                NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isFirst == TRUE"]; 
                [fetchRequest setPredicate:predicate];
            }
    
            if(isXSelected == YES){
                NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isFirst == FALSE"]; 
                [fetchRequest setPredicate:predicate];
            }
        }
    
        [fetchRequest setSortDescriptors:sortDescriptors];
        [fetchRequest setEntity:entity];
        [fetchRequest setFetchBatchSize:20];
    
        NSFetchedResultsController *frc = [[NSFetchedResultsController alloc]
                                           initWithFetchRequest:fetchRequest
                                           managedObjectContext:managedObjectContext
                                           sectionNameKeyPath:sectionKey
                                           cacheName:nil];
    
        [sortDescriptor release];
        [sortDescriptors release];
    
        frc.delegate = self;
        _fetchedResultsController = frc;
        [fetchRequest release];
        return _fetchedResultsController;
    }
    
    3 回复  |  直到 11 年前
        1
  •  28
  •   Cory Kilger    14 年前

    以下是我们在应用程序中的方法:

    // Assuming these exist
    NSPredicate * predicate;
    NSString * cacheName;
    
    [[fetchedResultsController fetchRequest] setPredicate:predicate];
    [NSFetchedResultsController deleteCacheWithName:cacheName];
    
    NSError * error = nil;
    [fetchedResultsController performFetch:&error];
    if (error) {
        // report error
    }
    
        2
  •  8
  •   Unibrium    12 年前

    不要忘记在执行fetchmetch之前将fetchedResultsController设置为nil。否则它将使用旧的。

        3
  •  -2
  •   Janusz Chudzynski    11 年前

    我也有类似的问题,我不明白为什么我的收藏视图不刷新它的单元格。 添加下面的方法可以解决我的问题。

    -(void)didUpdateObjectAtIndexPath:(NSIndexPath *)indexPath{
        UICollectionView *strongCollectionView = self.collectionView;
        [strongCollectionView  reloadItemsAtIndexPaths:@[indexPath]];
    
    
    }