我有一个由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/