我有一个由UITableView支持的工作Core Data

我现在正在实现一项功能,当表为空时,我禁用rightBarButtonItem

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear: animated];

    self.navigationItem.rightBarButtonItem.enabled = self.fetchedResultsController.fetchedObjects ? YES : NO;
}


但是即使表中有项目,self.fetchedResultsController.fetchedObjects也会返回nil,因此该按钮始终处于禁用状态。

我在performFetch中称呼viewDidLoad

我在viewDidLoad中尝试了此代码,但同样发生了。

为什么self.fetchedResultsController.fetchedObjects为零,即使填充了表也是如此?

EDIT添加了更多代码

在显示表之前,将立即在子上下文中生成项目。 fetchRequest使用相同的上下文。

这些项目肯定在上下文中,因为表在子上下文中填充了这些项目。但是,当调用viewWillAppear时,self.fetchedResultsController.fetchedObjects仍然为零。

这就是我所说的performFetch(在viewDidLoad中):

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
 NSError *error = nil;
 if (![self.fetchedResultsController performFetch: &error])
 {
      NSLog(@"Failed to perform fetch: %@", error);
 }

 dispatch_async(dispatch_get_main_queue(), ^{
            [self.tableView reloadData];
     });
    });


在显示VC之前,我先保存上下文。

最佳答案

您是否尝试过像这样在dispatchBlock中调用self.fetchedResultsController.fetchedObjects

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
 NSError *error = nil;
 if (![self.fetchedResultsController performFetch: &error])
 {
      NSLog(@"Failed to perform fetch: %@", error);
 }

 dispatch_async(dispatch_get_main_queue(), ^{
            self.navigationItem.rightBarButtonItem.enabled = self.fetchedResultsController.fetchedObjects ? YES : NO;
            [self.tableView reloadData];
     });
    });

关于ios - performFetch之后,fetchedObjects为零,但是tableView有数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40694300/

10-09 02:24