objective-c – MVC和cocoa绑定最佳实践问题

objective-c – MVC和cocoa绑定最佳实践问题,第1张

概述可以说我有一个视图,myView,一个视图控制器,myViewController和某种模型对象myModel.此外,假设该模型具有两个符合KVO的属性,arrayOfPeopleNames和arrayOfAnimalKinds(两个NSStrings). 在我看来,我希望有两个d出窗口绑定到这两个数组的内容. 我的问题是,如果myController有一个myModel的引用,并且下拉列表绑定到 可以说我有一个视图,myVIEw,一个视图控制器,myVIEwController和某种模型对象myModel.此外,假设该模型具有两个符合KVO的属性,arrayOfPeoplenames和arrayOfAnimalKinds(两个Nsstrings).

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

我的问题是,如果myController有一个myModel的引用,并且下拉列表绑定到myVIEwController,那么沿着myModel.arrayOfPeoplenames的行设置一个keypath是一个好习惯吗?

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

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

意见?

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

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

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

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

总结

以上是内存溢出为你收集整理的objective-c – MVC和cocoa绑定最佳实践问题全部内容,希望文章能够帮你解决objective-c – MVC和cocoa绑定最佳实践问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1005504.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存