我想刷新MasterDetail项目中的详细信息页面。 (在模态控制器中进行编辑后,应该刷新细节。)我知道将详细信息页面中的代码块放在哪里以强制刷新。我只是不知道用什么代码来做这件事。
此详细信息页面没有表格视图。它只使用文本标签和图像标签。
在新的提取时刷新数据的NSFetchedResultsController不在此视图控制器中,而是在从中获取此详细信息的表视图中。
是否无法刷新类似于[[self tableView] reloadData]的详细信息页面中的数据;在表格页面?
这是代码提示模态视图控制器,我需要放置代码块。
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController: editVC];
// Do whatever setup you want to here for your title bar, etc
[self presentViewController:nav animated:YES completion:^{
//CODE TO EXECUTE TO REFRESH CONTROLLER GOES HERE
}];
我可以用什么代码刷新控制器?
我认为这将是刷新文件中任何位置的详细视图控制器的相同代码。
感谢您的任何建议。
编辑:我可能错了上述代码将在解雇模态时执行。它可能只是在完成动画后执行。
但是,我仍然在寻找代码来刷新一个视图控制器,这个视图控制器不是来自fetchedresultscontroller的tableview,类似于[[self tableView] reloadData];如果这里有桌面视图。
EDIT2:
我试图在两个不同的地方刷新以下编辑的保存方法(它成功保存数据并关闭模态编辑控制器。它只是在模态编辑屏幕消失后不更新细节屏幕)。 (对于self.presentingViewController来说,我的理解是自我在这种情况下非常短暂。它实际上解雇了。)
if ([self.managedObjectContext save:&error]) {
// Dismiss View Controller
NSLog(@"Presenting controller%@",[self.presentingViewController class]);
ItemDetailVC *detailVC = [[ItemDetailVC alloc] init];//VC instantiated to be able to call method but this is probably an error as per Mundi's comment below
[detailVC reloadViewData];
NSLog(@"About to dismiss modal editVC");
[super dismissViewControllerAnimated:YES completion:^{
NSLog(@"in middle of dimissing");
ItemDetailVC *detailVC = [[ItemDetailVC alloc] init];
[detailVC reloadViewData];
}
这是方法reloadViewData详细介绍VC。
详情.m
-(void)reloadViewData {
//short version of UI
self.itemLabel.text = self.item.name;
self.itemSub.text = self.item.sub;
NSLog(@"In detail controller and about to call setneedsdisplay");
[self.itemLabel setNeedsDisplay];
[self.itemSub setNeedsDisplay];
}
这种方法确实在详细控制器中获取reloadViewData(基于日志输出)但不更新视图。
答案 0 :(得分:1)
是的,完成块将在控制器呈现后运行,而不是在它被解除后运行。
有几种方法可以做到这一点:
NSManagedObjectContextDidSaveNotification
; 没有等同于表视图的reloadData
。就像在表视图中一样,您必须编写自己的代码以将正确的数据放入表格单元格的标签中,您还必须编写自己的代码来填充详细视图的自定义标签和视图。只需创建方法reloadViewData
并使用它来初始化和更新视图。