我正在开发一个Cocoa应用程序,它需要几个滑块来控制几个“通道”数据的值。我想创建应用程序,以便所有通道数据作为整数存储在单个数组中。然后,每个滑块将绑定到数组中的单个元素。这有可能吗?如果需要,我需要使用NSMutableArray,还是可以使用标准C阵列?
答案 0 :(得分:1)
你应该花几个小时与Cocoa Bindings Programming Topics Guide。最好的方法是使用中间控制器(如NSObjectController,NSArrayController,NSDictionaryController或NSTreeController)。
然后考虑一下:您是否总是拥有固定数量的频道,或者您是否需要在运行时添加/删除频道?
因为您没有包含任何关于频道的描述,如何定义它(您自己的类或只是一些基本的Cocoa容器,如字典)或如何使用它,或者您是否要添加/删除动态通道,我能给你的最好的是最基本的例子。
简单案例
在最简单的情况下(你有固定的通道,一个通道只不过是某个值“foo”的容器),使用NSDictionaryController并选中“Prepares Content”框(创建自己的存储字典)。您将NSDictionaryController拖到IB XIB中。为此,您将为每个“频道”添加“channelAFoo”,“channelBFoo”等密钥。
为每个频道添加一个滑块。使用“选择”(默认值)的控制器键和通道A滑块的“channelAFoo”的模型键路径,通道B滑块的“channelBFoo”等将其绑定到字典控制器。
更复杂的案例
更复杂的情况会涉及一些可变数组(如您所怀疑的)和一个NSArrayController,其中包含可变数组作为其内容。您可以使用集合视图(NSCollectionView / Item),其中您的NSCollectionViewItem原型保存滑块(可能是一个漂亮的通道名称,颜色代码等,当您在它时)。当从集合中添加/删除通道时(通过数组控制器执行此操作以记录更改),将为该通道创建(或删除)原型的副本,其控件绑定到其representObject的某个键路径( “通道”对象的一个实例。
<强>结论强>
如果您需要更具体的建议,您必须更加具体地了解您的设计和意图。请记住,这是一种先进的Cocoa技术,您应该花费大量时间阅读文档,以便了解Bindings的工作原理。这将帮助您将问题分解为更小,更具体的问题(因此答案可以更合理地集中在一起)。