Ios 视图作为模型对象替换的属性

Ios 视图作为模型对象替换的属性,ios,objective-c,model-view-controller,cocoa-design-patterns,Ios,Objective C,Model View Controller,Cocoa Design Patterns,我正在构建一个算术应用程序&其中有数字和数字的NSObject的子类。这两个类都有相应的视图对象,它们都有一个数据源(数字或数字)和一个代理,即视图控制器 我发现它在让视图和模型协同工作以将数字视图设置为其相应数字的属性时非常有用 例如,Number类有一个保存其数字的NSMutableArray属性 如果我想找到相应NumberView的大小,我可以在控制器中编写如下代码: -(void) updateNumberViewFrameSize:(ACNumberView*) sender {

我正在构建一个算术应用程序&其中有数字和数字的
NSObject
的子类。这两个类都有相应的视图对象,它们都有一个数据源(数字或数字)和一个代理,即视图控制器

我发现它在让视图和模型协同工作以将数字视图设置为其相应数字的属性时非常有用

例如,Number类有一个保存其数字的
NSMutableArray
属性

如果我想找到相应NumberView的大小,我可以在控制器中编写如下代码:

-(void) updateNumberViewFrameSize:(ACNumberView*) sender
{
    NSUInteger i;
    float width = 0, height = 0;
    for (ACDigit* digit in [sender.dataSource returnNumberViewDataSource].digitArray)
    {
        width += digit.digitView.size.width;
        height += digit.digitView.size.width;
    }
    sender.frame = CGRectMake(sender.frame.origin.x, sender.frame.origin.y, width, height);
}
代码工作得很好,但是我觉得从模型中保持指向视图的指针不是一个好的实践,即使模型本身没有使用它


如果这是一种不好的做法,那么潜在的陷阱是什么?有没有更好的方法来达到这种目的?

首先:你是对的。这不是一个好的设计

第二:计算模型内数字视图的大小。但是数字视图应该知道它本身的大小。它通过数据源知道数字,并能得到数字。因此,它拥有计算其大小的所有信息

要显示问题,只需想象一下(即使这种情况在iOS上并不常见),您在两个位置显示相同的数字(=使用不同的数字视图)。这会破坏你的模型。为什么?


解决方案:将与图形状态(图纸、尺寸等)相关的所有代码放入数字视图和数字视图。在一半的道路上,这将是额外的工作。但最后,当每一个代码都迁移到视图层时,就如同在模型中计算一样简单。

这是一个很好的例子,说明了为什么它是错误的。一个视图可以访问它的子视图吗?你是对的,根据它必须保存的内容来计算数字的视图大小比从视图中获取数据要好得多