关于iPhone应用程序结构的问题 - 核心数据,视​​图,模态视图等

时间:2010-11-03 15:22:21

标签: iphone cocoa-touch core-data uiviewcontroller modalviewcontroller

大约一个月前,我和妻子想出了一个关于iPhone应用程序的好主意,所以我开始考虑应用程序如何从用户角度运行,大约一周前我第一次打开了XCode并开始发展。

在我开始深入研究应用程序之前,我想确保在脑海中清楚地了解一些关键概念,特别是与架构有关。

仅供参考,作为一项原则,我想尝试以编程方式(特别是用户界面)创建我的应用程序,以便我能够彻底了解正在发生的事情。稍后我可能会使用IB作为加速UI开发的工具(目前适用,因为我使用的是TableView而不是静态视图)。

查看控制器

  • 因此,UINavigationControllers通常不是子类,并且在AppDelegate中创建为属性,并且是MainWindow.xib的主要“子视图”。

  • UINavigationController控制一堆视图,通常使用根视图控制器启动。

  • 导航控制器通常被引用并从当前/顶部视图控制器中作为[self navigationcontroller]发送消息,它是UIViewController父类的只读属性。

核心数据

  • Managed对象上下文是访问模型中数据的主要控制点,但通常不直接使用,而是使用fetch请求返回数据对象的数组,集合或字典,然后由查看控制器以显示和操作数据。

  • 将上下文创建为app委托中的属性,然后在启动时传递给根视图控制器,然后在告知导航控制器更改视图之前将其传递给堆栈中的后续视图(对于轻敲一个单元格的例子)。

所以我花了一个星期才到达这里,我可以创建我的模型,用数据填充它并将其显示在表格视图上但是当你想要编辑数据时我无法在模态视图上找到很多东西,具体如何设计模态视图(如果与普通视图有任何特定的差异)?

另外,我不完全确定数据的整个“绑定”,以查看对象的功能以及如何以编程方式执行此操作?

非常感谢您的意见和建议。

2 个答案:

答案 0 :(得分:2)

使用presentModalViewController:animated显示视图时会变为模态。在呈现模态视图之前,您可以传递要编辑的模型。

DetailViewController dvc = ...;
dvc.model = model;
dvc.delegate = self; // if you want to use a delegate pattern.
[self presentModalViewController:dvc animated:YES];

由于您要编辑的模型在模态视图控制器中可用,因此您可以在viewDidLoad中设置值。 iOS平台上没有可用的数据绑定,这意味着您必须手动更新视图和模型。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.someTextField.text = self.model.someText;
}

使用模态视图时需要考虑的是您必须提供一种解除它的方法。例如。通过顶部带有取消和保存按钮的导航栏。使用以下命令解除模态视图控制器:

[self dismissModalViewControllerAnimated:YES];

可以从模态视图控制器中关闭模态视图,但这也意味着这样的模态控制器必须能够保存有问题的模型。我个人会使用回调给呈现控制器,让它知道保存或取消以及处理模态视图的解雇。这可以使用委托模式完成。因此,当用户点击“保存”时,您可以更新模型,然后通知代理。

- (IBAction)save:(id)sender {
    self.model.someText = self.someTextField.text;
    [self.delegate detailViewControllerDidSave:self];
}

在演示者中有一个方法,如:

-(void)detailViewControllerDidSave:(DetailViewController *)controller {
  // save the model
  [self dismissModalViewControllerAnimated:YES];
}

答案 1 :(得分:0)

根据我对观点/数据的了解,得到了一些答案。我还没有使用CoreData的经验,所以不会回答那个部分。

  • 模态视图只是一个常规视图。但它的大小可能略有不同,因为它涵盖了导航控制器中推送的视图无法覆盖的一些UI元素。

  • 对于视图的“绑定”数据,如果填写表格视图,则已经完成了。在Controller中实现了一系列“数据源”方法,您可以在其中将模型中的数据提供给View(MVC模式)。