我确信这必须是iOS应用中的常见模式。我有一个列表控制器,显示项目列表。我有一个segue(使用故事板)到一个模态添加一个新项目,我只是收集名称。一旦被解雇,我将返回列表,更新它以包括添加的项目,并做一些其他小事情(为了简单起见,让我们说一些东西)。至关重要的是,我需要记录列表控制器的一部分,而不是模态控制器。
在此过程中的某些时刻,我还需要将新项目插入到我的托管对象上下文中。
我尝试了两种方法:
1)使用PrepareForSegue将ManagedObjectContext传递给模态控制器。将新项目从模态控制器插入上下文。在这一点上很有用。但现在我想刷新我的视图并写下我的日志行。我不能把它们放在viewWillAppear中,因为我不希望在第一次加载或任何其他时间记录这些行,只有在从模态返回后才会记录。
2)使列表控制器成为模态控制器的委托,以便我可以在列表控制器本身中完成所有工作,并且只在模式中使用保存按钮时调用列表控制器的代码(避免问题在每个负载上运行)。但由于Item是一个托管对象,我不能在没有引用模态控制器一无所知的上下文的情况下创建它,因此我无法在模态中插入项目。我也无法将它传递给委托并将其插入List控制器,因为没有上下文就无法创建托管对象。
这种流程的既定标准是什么?也许我应该使用两者的组合 - 将上下文传递给模态控制器,以便它可以处理它自己的插入,然后调用列表控制器中的委托代码来处理日志记录?
答案 0 :(得分:0)
我使用的是1)和2)的组合。在prepareForSegue中创建一个新的托管对象,并将其传递给模态视图控制器。将列表控制器设置为模式视图控制器的委托,并更新委派方法中的日志记录。
模态中不需要任何核心数据繁重,不需要知道这些事情。
(事实上,如果你只是在模态中设置一个名称,它甚至不需要知道对象,你可以只返回一个字符串,但如果你传递了它给你的对象如果您决定使其更具功能性,可以获得更大的灵活性。)