我正在构建预算应用并遇到核心数据的一些问题。我有一个表结构,其中有主要类别和子类别。每个名称都有一个名称,每个组合只有一个名称有效。 (即我可以在几个主要类别中拥有子类别保险,但不能在一个主要类别中保险两次)。 所以我可以毫无问题地添加,删除和重命名主要类别和子类别。但是,当我重命名主类别并再次打开它以查看其子类别时(这是在导航控制器中,您选择一个主类别,在下一个视图中您看到子类别),一段时间内都看不到。经过几秒钟后,通过重新打开子类别“重新加载”,它们将再次可见。
我正在使用FetchedResultsController。知道我错过了什么吗?我需要在某处重装吗?但是我认为在使用FetchedResultsController时我不必重新加载表?
以下是相关的代码部分:
#pragma mark Initializer and view setup
- (void)setupFetchedResultsController
{
NSError *error = nil;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SpendingCategory"];
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"position" ascending:YES]];
[self.mainCategory.managedObjectContext executeFetchRequest:request error:&error];
request.predicate = [NSPredicate predicateWithFormat:@"belongsToMainCategory.name = %@", self.mainCategory.name];
self.fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:request
managedObjectContext:self.mainCategory.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
}
- (void)viewDidLoad
{
//Edit/Done button
UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Edit", nil) style:UIBarButtonItemStyleBordered target:self action:@selector(editTable:)];
[self.navigationItem setRightBarButtonItem:editButton];
[super viewDidLoad];
self.sumTitleLabel.text = [NSString stringWithFormat:@"%@%@", NSLocalizedString(@"Budget/Month", nil), @":"];
self.categorySumTitleLabel.text = [NSString stringWithFormat:@"%@%@", self.mainCategory.name, @":"];
[self refreshIcon];
self.iconButton.hidden = YES;
self.iconImage.hidden = NO;
self.mainCategoryNameTextField.text = self.mainCategory.name;
self.mainCategoryNameTextField.delegate = self;
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.sumLabel.text = [[DatabaseFetches budgetPerMonthForManagedObjectContext:self.mainCategory.managedObjectContext] getLocalizedCurrencyString];
self.categorySumLabel.text = [[self.mainCategory getMonthlyCostsOfAllSpendingCategories] getLocalizedCurrencyString];
[self refreshIcon];
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
}
答案 0 :(得分:0)
如果您的UI没有更新,可能是因为数据仍然被缓存。也许你的详细视图控制器没有正确解除分配。
在显示之前简单地重新加载表视图没有任何害处:
-(void)viewWillAppear:(BOOL)animated:
[super viewWillAppear:animated];
[self.tableView reloadData];
}
但是,您的表格视图应该是全新的,因此这应该是自动发生的。检查您的视图层次结构逻辑。