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的例子中,由于控制器还充当视图中介,我想知道这是否是放置它的正确位置。