Привязки какао: привязка NSSlider к одному значению в массиве
Я работаю над приложением Какао, которое требует нескольких ползунков, которые будут контролировать значения для нескольких "каналов" данных. Я хотел бы создать приложение, чтобы все данные канала сохранялись в виде целых чисел в одном массиве. Каждый ползунок затем будет привязан к одному элементу в массиве. Это вообще возможно? Если это так, мне нужно использовать NSMutableArray или я могу обойтись со стандартным массивом C?
1 ответ
Вы должны потратить несколько часов на Руководство по программированию тем Cocoa Bindings. Наилучшим подходом является использование промежуточного контроллера (например, NSObjectController, NSArrayController, NSDictionaryController или NSTreeController).
Затем подумайте: у вас всегда будет фиксированное количество каналов или вам нужно будет добавлять / удалять каналы во время выполнения?
Поскольку вы не включили описание того, что такое канал, как вы его определяете (ваш собственный класс или просто какой-то базовый контейнер Какао, такой как словарь) или как он будет использоваться, или хотите ли вы добавлять / удалять каналы динамически, лучшее, что я могу вам дать - это самый простой возможный пример.
Простой случай
В простейшем случае (у вас есть фиксированные каналы, а канал - это не более чем контейнер для некоторого значения "foo"), используйте NSDictionaryController и установите флажок "Prepare Content" (чтобы создать свой собственный словарь для хранения). Вы перетащите NSDictionaryController в свой IB XIB. К нему вы добавите такие ключи, как "channelAFoo", "channelBFoo" и т. Д., Для каждого из этих "каналов".
Добавьте слайдер для каждого канала. Свяжите его с контроллером словаря с помощью ключа контроллера "selection" (по умолчанию) и пути ключа модели "channelAFoo" для ползунка канала A, "channelBFoo" для ползунка канала B и т. Д.
Более сложный случай
Более сложный случай будет включать в себя некоторый изменяемый массив (как вы подозревали) и NSArrayController с этим изменяемым массивом в качестве его содержимого. Вы можете использовать коллекционное представление (NSCollectionView/Item), где ваш прототип NSCollectionViewItem содержит ползунок (и, возможно, отличное имя канала, цветовой код и т. Д., Пока вы там находитесь). Когда каналы добавляются / удаляются из вашей коллекции (делайте это через контроллер массива, чтобы он записывал изменения), для этого канала будет создана (или удалена) копия вашего прототипа, а его элементы управления будут привязаны к некоторому ключевому пути его представленного объекта (экземпляр вашего объекта "Channel").
Заключение
Если вам нужен более конкретный совет, вам нужно быть более конкретным в отношении своего дизайна и намерений. Помните, что это продвинутая технология Какао, и вы должны планировать тратить много времени на чтение документации, чтобы понять, как работает Bindings. Это поможет вам разбить ваш вопрос на более мелкие, более конкретные вопросы (чтобы ответы могли быть более разумными).