我正在一个Cocoa应用程序上工作,该应用程序需要几个滑块来控制多个“通道”数据的值。我想创建该应用程序,以便将所有通道数据作为整数存储在单个数组中。然后,每个滑块将绑定到数组中的单个元素。这有可能吗?如果是这样,我需要使用NSMutableArray还是可以摆脱标准C数组?
最佳答案
您应该在Cocoa Bindings Programming Topics Guide上花费几个小时。最好的方法是使用中间控制器(例如NSObjectController,NSArrayController,NSDictionaryController或NSTreeController)。
然后考虑:您将始终拥有固定数量的通道,还是需要在运行时添加/删除通道?
由于您尚未包含有关渠道的描述,定义方式(您自己的类或只是一些基本的Cocoa容器(如字典)),如何使用渠道,或者是否要动态添加/删除渠道,我能给你的最好的就是最基本的例子。
简单案例
在最简单的情况下(您具有固定的通道,而通道仅是用于存放值“ foo”的容器),请使用NSDictionaryController并选中“准备内容”框(以创建自己的字典进行存储)。您将NSDictionaryController拖到IB XIB中。为此,您将为每个“通道”添加诸如“ channelAFoo”,“ channelBFoo”之类的键。
为每个通道添加一个滑块。使用控制器键“选择”(默认)和模型键路径(用于通道A滑块)和“ channelBFoo”(用于通道B滑块)将其绑定到词典控制器。
更复杂的情况
更复杂的情况将涉及某个可变数组(您怀疑)和一个以该可变数组为内容的NSArrayController。您可能会使用一个集合视图(NSCollectionView / Item),其中您的NSCollectionViewItem原型将保存滑块(可能还包括一个漂亮的通道名称,颜色代码等)。随着从集合中添加/删除通道(通过数组控制器执行此操作,以便它记录更改),将为该通道创建(或删除)原型的副本,并将其控件绑定到其namedObject的某个键路径(您的“频道”对象的实例)。
结论
如果您需要更具体的建议,则必须对设计和意图更加具体。请记住,这是一项先进的Cocoa技术,您应该计划花费大量时间阅读文档,以便您了解绑定的工作原理。这将帮助您将问题分解为更小的,更具体的问题(以便可以更合理地集中答案)。
关于cocoa - cocoa 绑定(bind):将NSSlider绑定(bind)到数组中的单个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3497041/