【问题标题】:IOS MVC pattern and data controller for manipulating NSMutableArray用于操作 NSMutableArray 的 IOS MVC 模式和数据控制器
【发布时间】:2013-04-10 17:25:27
【问题描述】:

我有:
一个名为 Care 的类
一个名为 masterCareList
的 NSMutableArray 主视图、详细视图
careDataController 用于将 Cares 添加到 List 并计算对象的数量。

我想在 MasterView 中计算我的对象,我想在 detailView 中添加一个对象。在这两种情况下,都使用 careDataController(不倒带转场或在视图之间传递数据)和相同的 masterCareList。

如何以最佳 (MVC) 方式使用相同的 dataController 和相同的 NSMutable 数组?

【问题讨论】:

  • 为了解决这个问题,我现在通过 prepareForSeque 方法将我的 dataController 从 masterView 传递到 detailView。然而,这并不正确,因为我不想发送 dataController。我想知道我是否应该使用代表?然后我要把我的 dataController 变成一个协议吗?
  • 我的答案是你想要的吗?

标签: ios xcode model-view-controller nsmutablearray


【解决方案1】:

您可以在应用初始设置时创建 careDataController,并通过 MasterView 的属性访问 careDataController。这将使您能够独立于视图控制器封装对数据的计数和其他操作。

在某个地方创建 MasterView...AppDelegate 的一个非常高级的示例...

//Appdelegate.m file
MasterView *mv = [[MasterView alloc] init];
DataController *careDataController = [[DataController alloc] init];
mc.model = careDataController;  //model is a property within MasterView that you create

[self presentViewController:mv animated:YES completion:nil];

现在您基本上可以在创建 DetailView 并将您创建的模型属性设置为您在上面设置的 MasterViews 模型属性之后在 MasterView 中呈现它。

//some procedure in MasterView.m
DetailView *dv = [[DetailView alloc] init];
dv.model = self.model; //self.model you set above

[self presentViewController:dv animated:YES completion:nil];

现在在 DetailView 中,您可以将护理对象添加到您最初在应用启动时创建的原始 careDataController...

//somewhere in DetailView.m
Care *careObject = [[Care alloc] init];
[self.model addObject:careObject];

当您在添加完对象后关闭 DetailView 时,MasterView 中的 careDataController(模型属性)现在将拥有您在 DetailView 中添加的新护理对象。

编辑: 我看到你的新评论,从某种意义上说,它本质上是我刚刚在上面写的,我不觉得是不正确的。您可以做的另一件事不是像上面那样传递它,而是让 MasterView 成为 DetailView 的代表。当您添加 Care 对象时,将该对象状态保存在 DetailView 中,并使用您在 DetailView 中定义的协议将其传回。您可能在 MasterView 实现的以下协议中有一个方法...

-(void)detailView:(DetailView *)dv didInsert:(Care*)careObject
{
    [self.model addObject:careObject];
}

【讨论】:

  • @djcj 是我的答案,你在找什么?
  • 我想是的,我现在已经实现了我想要的所有功能,但不是按照我想要的 MVC 结构。因此,我现在将尝试将尽可能多的逻辑移至 dataController 并仔细查看您的答案!
  • 我有点困惑。这篇文章并没有真正帮助,但它很有趣:hollance.com/2012/02/dont-abuse-the-app-delegate 无论如何,我现在正在尝试在 appDelegate 中设置数据模型,因为否则我没有“和我一起”获得 managedObjectContext。所以我有: CareDataController *dataController; dataController.managedObjectContext = self.managedObjectContext; MasterViewController *controller = (MasterViewController *)navigationController.topViewController;控制器.dataController = 数据控制器;问题是dataController没有传递给detailView。
  • 如果您使用核心数据,我会查看github.com/magicalpanda/MagicalRecord。使用它,您将再次爱上核心数据。我认为这将帮助您解决上述情况。
猜你喜欢
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
  • 2010-10-25
  • 2017-03-20
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 2014-02-21
相关资源
最近更新 更多