0

我正在构建一个算术应用程序&其中有数字和位数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); 
} 

代码工作得很好,但我觉得这是不好的做法即使模型本身没有使用它,也可以将该指针保持为来自模型的视图。

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

回答

1

第一:你说得对。这不是好设计。

第二:您计算模型内数字视图的大小。但是数字视图应该知道它的大小。它通过数据源知道数字并可以获取数字。因此它具有计算其大小的所有信息。

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

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

+0

很好的例子,为什么它是错的。一个视图可以访问它的子视图吗? – chartman 2013-05-13 13:34:13

+1

@chartman是的,有[查看子视图]。 – 2013-05-14 07:31:05

+0

你说得对,根据它必须保存的数字来计算数字视图的大小要好得多,而不是从视图中获取数据 – chartman 2013-05-15 01:21:35