Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 每个NSArrayController有多个筛选列表_Cocoa_Nsmutablearray_Cocoa Bindings_Nsarraycontroller - Fatal编程技术网

Cocoa 每个NSArrayController有多个筛选列表

Cocoa 每个NSArrayController有多个筛选列表,cocoa,nsmutablearray,cocoa-bindings,nsarraycontroller,Cocoa,Nsmutablearray,Cocoa Bindings,Nsarraycontroller,我需要做的很简单,比如我有一个学生域对象列表 @implementation Student : CPObject { CPString name @accessors; BOOL isLate @accessors; BOOL isMale @accessors: } 我将这些Student对象的列表存储在NSMutableArray中,该数组是我的模型对象的一部分 我有一个NSTableView显示这些Student对象,表中有复选框可编辑isLate和isMale

我需要做的很简单,比如我有一个学生域对象列表

@implementation Student : CPObject
{
    CPString name @accessors;
    BOOL isLate @accessors;
    BOOL isMale @accessors:
}
我将这些
Student
对象的列表存储在
NSMutableArray
中,该数组是我的模型对象的一部分

我有一个
NSTableView
显示这些
Student
对象,表中有复选框可编辑
isLate
isMale
属性。该表由一个
NSArrayController
支持,它从模型中代理
NSMutableArray

在界面的其他地方,我想有两个文本字段,显示“迟到学生人数”和“男生人数”,这就是我的问题所在

由于
NSArrayController
支持通过谓词进行过滤,我最初的想法是为每个聚合显示(迟到学生数、男生数)创建3个
NSArrayController
对象,一个用于代理tableview。对于聚合控制器,我将应用筛选并将文本字段绑定到
arrangedObjects.@count
。然而,这似乎是错误的方法,因为主控制器对
NSMutableArray
进行编辑时无法通知对其他两个控制器所做的更改

这里提到了我想到的另一种方法。使用这种方法,我将绑定2个“slave”
NSArrayController
,在支持tableview的“master”控制器上执行聚合操作。然而,这种方法似乎也不那么干净

第三,我在这里读到了这篇文章:。这倾向于建议我应该将复杂性转移到我的模型对象中。也许我应该创建一个
StudentList
类,包含
allStudents
maleStudents
lateStudents
属性进行绑定?对于这么简单的事情来说,这似乎有些过分了


总的来说,这似乎是一个在程序中非常常见和简单的操作,但我对Cocoa还比较陌生,所以我真的不确定什么是“正确”的方法。请开导我

我的直觉是第三种方法是最好的——如果你封装了模型的复杂性,那么维护它就会更容易。谢谢你的回复。我同意拥有“肥胖模型”总比拥有“肥胖控制器”好。在这种情况下,我觉得将逻辑移到模型中有些错误。这是因为这两个聚合函数纯粹是与视图相关的逻辑,不在其他任何地方使用。在典型的“MVP”体系结构中,似乎将此逻辑插入表示模型是最好的方法,而不是污染我的领域模型。在cocoa的例子中,由于控制器还充当视图中介,我想知道这是否是放置它的正确位置。