【问题标题】:Where to store data to follow MVC pattern在哪里存储数据以遵循 MVC 模式
【发布时间】:2013-02-24 17:23:51
【问题描述】:

我终于完成了我的第一个小 osx 应用程序,我为自己感到骄傲!但是我仍然对我真正尝试遵循的 obj-c MVC 方法感到困惑。阅读所有不同的教程并没有给我最后的线索。 我使用 Hillegass 的书“MAC OS X 的可可编程”。以下模式用于在我的控制器类中通过NSArrayController 将用户输入与tableview 绑定:

- (IBAction)pushAdd:(id)sender {

    ToDoItem *newToDo = [[ToDoItem alloc] init];

    [newToDo setValue:[_inputName stringValue] forKey:@"name"];
    [newToDo setValue:[NSNumber numberWithDouble:[_inputNomValue doubleValue]] forKey:@"nomValue"];
    [newToDo setValue:[NSNumber numberWithDouble:[_inputTolerancePlus doubleValue]] forKey:@"tolerancePlus"];
    [newToDo setValue:[NSNumber numberWithDouble:[_inputToleranceMinus doubleValue]] forKey:@"toleranceMinus"];
    [newToDo setValue:[NSString stringWithFormat:@"%@",[_inputDistribution titleOfSelectedItem]] forKey:@"distribution"];
    [newToDo setValue:[NSString stringWithFormat:@"%@",[_inputDirection titleOfSelectedItem]] forKey:@"direction"];

    [toDoItemArrayController addObject:newToDo];

...

我的问题:

由于我的模型类ToDoItem 用作创建ToDoItem 实体的蓝图,因此完整信息存储在toDoItemArrayController 控制器中(不在模型中)。 但是如果我需要在其他地方使用数组信息怎么办?我是否需要在我的ToDoItem 模型类中定义一个额外的数组,其中包含来自toDoItemArrayController 的所有信息?到目前为止,我对 MVC 的理解是模型应该包含稍后由控制器处理的所有信息。

【问题讨论】:

    标签: objective-c macos model-view-controller model


    【解决方案1】:

    您可以在控制器之间传递带有ToDoItem 对象的数组。但是在 ToDoItem 中声明一个与您的数据模型无关的数组将不符合 MVC 模式。
    要在其他地方访问数组,您可以传递它,例如,可能使用单例或常用的可访问对象,如 AppDelegate。

    【讨论】:

    • Rakesh,感谢您的回答。在我的案例中,为什么包含所有 ToDoItem 的数组与 ToDoItem 模型数据模型无关?
    • 嗯,它不是数据模型的一部分。它只是从数据模型创建的对象的集合。
    • 想一想,如果你在 ToDoItem 中声明了一个数组来存储 ToDoItem 的所有对象,那么你创建的所有对象都会有一个数组依次存储所有创建的对象。并且该数组中的所有对象都将具有相同的数组,依此类推。有意义吗?
    • 拉克什,谢谢。这说得通。是否有显示 MVC 概念以及模型类看起来像您所知道的样例代码的源?
    • 目前没有。但是你会在谷歌上找到很多。让我试试。