ios / xcode / core数据:如何在Master Detail设置中刷新详细视图

时间:2015-04-21 01:43:20

标签: ios core-data reload presentviewcontroller

我想刷新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(基于日志输出)但不更新视图。

1 个答案:

答案 0 :(得分:1)

是的,完成块将在控制器呈现后运行,而不是在它被解除后运行。

有几种方法可以做到这一点:

  • 您可以让详细视图控制器成为编辑视图控制器的委托。在解雇时,编辑VC将通知细节VC可以更新其UI的更改;
  • 另一种可能性是简单地保存已编辑的托管对象并让详细信息VC收听通知NSManagedObjectContextDidSaveNotification;
  • 更简单的方法是将详细信息VC作为编辑VC的关闭按钮的响应者并在那里处理UI更新。

没有等同于表视图的reloadData。就像在表视图中一样,您必须编写自己的代码以将正确的数据放入表格单元格的标签中,您还必须编写自己的代码来填充详细视图的自定义标签和视图。只需创建方法reloadViewData并使用它来初始化和更新视图。