Core data NSFetchedResultsController刷新以获取新数据

Core data NSFetchedResultsController刷新以获取新数据,core-data,nsfetchedresultscontroller,Core Data,Nsfetchedresultscontroller,请给我指路 我实现了以下代码来获取我的对象: - (NSFetchedResultsController *)fetchedResultsController { if (_fetchedResultsController != nil) { return _fetchedResultsController; } NSPredicate *predicate = nil; if (self.selectedCategory) {

请给我指路

我实现了以下代码来获取我的对象:

- (NSFetchedResultsController *)fetchedResultsController {
    if (_fetchedResultsController != nil) {
        return _fetchedResultsController;
    }

    NSPredicate *predicate = nil;

    if (self.selectedCategory)
    {
        predicate = [NSPredicate predicateWithFormat:@"ANY category_ids.category_id == %@", self.selectedCategory];
    }

    _fetchedResultsController = [EyeArtist fetchAllGroupedBy:nil withPredicate:predicate sortedBy:@"artist_id" ascending:NO delegate:self];

    return _fetchedResultsController;
}
所以,当应用程序运行时,第一次fetch不带谓词,所以第二次我需要带谓词的新fetch

我点击按钮并设置字符串self.selectedCategory,但我不知道如何从-(NSFetchedResultsController*)fetchedResultsController重新提取数据


因此,我假设它必须像对fetchedResultsController实例执行新请求一样。

更改搜索条件后,必须将实例变量
self.fetchedResultsController
设置为
nil
, 因此,对“lazy getter”函数的下一次调用将使用 已更改谓词。大概是这样的:

self.fetchedResultsController = nil;
[self.fetchedResultsController performFetch:&error];
[self.tableView reloadData];

这是我在fetch控制器需要属性时使用的模式:

- (void)setSelectedCategory:(id)selectedCategory{
    if(selectedCategory == _selectedCategory){
         return _selectedCategory
    }
    _selectedCategory = selectedCategory;
    self.fetchedResultsController = nil;
    if(self.isViewLoaded){
        [self.tableView reloadData]; // but better to put this in an update views method that you can also call from viewDidLoad.
    }
}

- (NSFetchedResultsController *)fetchedResultsController {
    if (_fetchedResultsController != nil) {
        return _fetchedResultsController;
    }
    id selectedCategory = self.selectedCategory;
    // Only need this if a category is required.
    if(!selectedCategory){
        return nil;
    }
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY category_ids.category_id == %@", selectedCategory];
    _fetchedResultsController = [EyeArtist fetchAllGroupedBy:nil withPredicate:predicate sortedBy:@"artist_id" ascending:NO delegate:self];
    return _fetchedResultsController;
}

如果使用了getter。。。如果您只是在self.fetchedResultsController下初始化FRC,
\u FRC=nil
@Evils:设置
\u fetchedResultsController=nil后
,下一次调用self.fetchedResultsController将在getter方法中重新创建FRC(现在使用更改的搜索条件)。如果使用了getter,这就是我的意思。您提到了懒惰的getter,但大多数人可能不理解您假设有一个合适的getter。不管怎么说,我的评论不一定说得很清楚,是我的错!