【发布时间】:2015-06-27 23:28:11
【问题描述】:
我想刷新 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
}];
我可以放什么代码来刷新控制器?
我认为刷新文件中任何地方的细节视图控制器的代码都是相同的。
感谢您的任何建议。
编辑:我可能错了,上面的代码将在模式解除时执行。它可能只是在动画完成后执行。
但是,我仍在寻找代码以从类似于 [[self tableView] reloadData]; 的 fetchedresultscontroller 刷新不是 tableview 的视图控制器;如果这里有tableview。
编辑2:
我正在尝试在两个不同的地方刷新以下编辑的保存方法(它确实成功地保存了数据并关闭了模态编辑控制器。它只是在模态编辑屏幕消失后不更新详细信息屏幕)。 (我的理解是,在这种情况下 self 真的很短,因为 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];
}
这里是详细的VC方法reloadViewData。
详细.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(基于日志输出),但不会更新视图。
【问题讨论】:
-
不是重复的。另一个问题没有答案。这段代码也放在另一个地方。很明显,您将此标记为重复,因为您对使用 viewWillAppear 的另一个问题的建议没有成功。
-
您的代码更新揭示了另一个问题。您必须关闭编辑控制器以显示其“下方”的细节控制器,而不是创建新的细节控制器!
-
是的,这是有道理的。我分配一个新的细节控制器的原因是可以访问方法 loadDetail 但你是对的,我正在创建一个新实例并在该实例中重新加载它,而不是在已经存在的那个实例中。问题是我不知道如何在以前的细节控制器中调用方法,因为 [detailVC loadView] 在没有创建新的 detailVC 实例的情况下抛出错误消息。
标签: ios core-data reload presentviewcontroller