我有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
为零,即使表格已填充?
编辑添加了更多代码
在显示表之前,会立即将项目生成到子上下文中。 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之前保存了上下文。
答案 0 :(得分:1)
您是否曾尝试在此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];
});
});