当前位置:  开发笔记 > IOS > 正文

MVC和cocoa绑定最佳实践问题

如何解决《MVC和cocoa绑定最佳实践问题》经验,为你挑选了1个好方法。

可以说我有一个视图,myView,一个视图控制器,myViewController和某种模型对象myModel.此外,假设该模型具有两个符合KVO的属性,arrayOfPeopleNames以及arrayOfAnimalKinds(两个NSStrings).

在我看来,我希望有两个弹出窗口绑定到这两个数组的内容.

我的问题是,如果myController有一个myModel的引用,并且下拉列表绑定到myViewController,那么设置一个关键路径是不错的做法myModel.arrayOfPeopleNames

或者我是否需要在myViewController中设置一个额外的NSArray,它反映myModel中的一个并转而绑定到该keypath?

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

意见?



1> Marc Charbon..:

您不应该在控制器中镜像模型的数组.虽然我不太关心在一个非常简单的情况下直接绑定到模型的数组,但您也可以将UI对象绑定到NSArrayController,后者管理模型的数组.这将提供模型和UI之间的分离,更重要的是处理排序,选择,添加和删除对象等任务.

通过关注KVO和绑定违反"纯粹的"模型视图控制器设计,我可以看到你来自哪里,但这不是你应该担心的事情.即使KVO通知直接从模型传递到视图,设置和更改视图和模型之间的连接仍然是控制器的责任(仅在这种情况下,它通过IB完成).例如,您不希望模型对象获取对视图的引用,并将自身绑定到UI,这将是控制器的责任.

作为另一个要避免的例子,考虑一下你的模型是否有一个"动物ID"数组而不是名字.您可能需要创建一个值转换器或格式化程序来进行转换,而不是创建将动物ID转换为模型中人类可读动物名称的方法.这允许您保持模型和视图之间的分离级别.

还要记住,设计模式的目的是降低编写问题解决方案的复杂性,永远不要增加它.你会发现这正是Cocoa的工作方式,即使它可能并不总是遵循最严格的模式定义.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有