假设我有一个视图,myview,一个视图控制器,myViewController和某种模型对象MyModel。此外,可以说该模型具有两个符合KVO的属性, arrayOfPeopleNamesarrayOfAnimalKinds (两个NSString)。

在我看来,我想将两个弹出窗口绑定到这两个阵列的内容。

我的问题是,如果MyController对MyModel有参考 myModel.arrayOfPeopleNames?

还是我需要在MyViewController中设置一个额外的NSARRAY,该NSARRAY反映了MyModel中的一个并绑定到该键盘?

从实现的角度来看,前者似乎更简单(我不必使控制器阵列镜像模型数组),但是我想知道它是否将模型暴露到了视图中。

意见?

有帮助吗?

解决方案

您不应该反映控制器中模型的数组。尽管我不会太担心在非常简单的情况下直接绑定模型数组,但您也可以将UI对象绑定到管理模型数组的NSarrayController。这将提供模型和UI之间的分离,更重要的是处理诸如排序,选择,添加和删除对象等任务等。

我可以看到您来自何处,因为KVO和绑定违反了“纯”模型视图控制器设计,但这不是您应该担心的。即使KVO通知直接从模型传递到视图,但设置和更改视图和模型之间的连接仍然是控制器的责任(仅在这种情况下,它是通过IB完成的)。例如,您不希望模型对象获得对视图的引用,并将其绑定到UI,这是控制器的责任。

作为要避免的事物的另一个例子,请考虑您的模型是否具有一系列“动物ID”而不是名称。您可以不用创建一种将动物ID转换为模型中可读动物名称的方法,而是要创建一个值的变压器或格式化器来进行转换。这使您可以保持模型和视图之间的分离水平。

还要记住,设计模式的目的是减少编码解决方案的复杂性,切勿增加问题。您会发现,这正是可可的工作方式,即使它可能并不总是遵守模式的最严格定义。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top