0

У меня есть NSTableView в плавающем окне, которое динамически привязано к свойству arrangedObjects экземпляра NSArrayController, который соответствует самому верхнему окну документа с кодом следующего :NSTableColumn привязано к NSArrayController переднего окна с исключениями при изменении окна

NSArrayController *documentSpecificArrayController; // properly set elsewhere 
NSTableColumn *tableColumnToBind; // properly set elsewhere 

[tableColumnToBind unbind:NSValueBinding]; 
[tableColumnToBind bind:NSValueBinding 
       toObject:documentSpecificArrayController 
      withKeyPath:@"arrangedObjects" 
       options:[NSDictionary dictionaryWithObjectsAndKeys: 
         [NSNumber numberWithBool:YES], 
         NSContinuouslyUpdatesValueBindingOption, 
         nil]]; 

Пока представленный массив/вид таблицы пуст, все работает нормально; все различные операции над табличным представлением/представленным массивом в одном документе работают нормально. Если кто-то переключается из документа с непустым представленным массивом в документ, для которого представленный массив пуст, генерируется бесконечный поток из *** -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0) исключений.

Я пропустил что-то, что мне нужно сделать, чтобы чисто отрубить привязку при переключении окон? Что-то другое? (Есть ли какая-то конкретная информация, которую я пропустил, которая поможет диагностировать мою ошибку?)

+0

«правильно установлен в другом месте» [править] :-) –

+0

@Joshua Nozzi: Я знал * кто-то спросил бы. :) Контроллер массива является свойством класса документа, который является делегатом нового верхнего окна, поэтому он получен таким образом; столбец таблицы содержится в представлении таблицы, которое подключается к IBOutlet класса, в котором происходит этот код. Я проверял, независимо от этого исключения-бросания, что обе переменные установлены и меняются, как ожидалось. – Isaac

ответ

1

На основании вашего комментария кажется, что вы, возможно, пытаетесь создать палубу инспектора или что-то подобное. Это правда? Если это так, вам следует просто привязать непосредственно к контроллеру массива активного документа, привязав к Shared Application с ключом пути mainWindow.document.myArrayController. Я думаю, что вы сталкиваетесь с проблемами цикла/времени с помощью Bindings, и использование этого метода должно смягчить это.

+0

Я проведу короткое время, но (1) пример использования - это что-то вроде инспекторской палитры, (2) имеет смысл с тем, что я видел до сих пор, и (3) это упростит то, что было довольно длинным и грязным способом зацеплять вещи вплоть до одного простого связывания. Есть ли где-то в документах, что я должен был видеть, как это сделать с самого начала? – Isaac

+0

Я не знаю, что это документально зафиксировано в любом месте в материалах Apple, но это решение, которое плавает с 10,3 дней на различных сайтах сообщества Cocoa. Я использую его сам. Предостережение. Если у вас разные типы документов, и у всех это не та ключ, вам нужно «заполнить пробелы» и вернуть nil для части myArrayController в несовместимых классах документов или вы получите ошибки в ключевом пути. –

+0

Дополнительное предложение: Поместите контроллер массива в xib палитры и привяжите таблицу к * it *. Затем привяжите содержимое этого контроллера массива * к массиву, который контроллер массива doc предназначен для представления (через тот же «трюк» ключа », как раз с другим конечным сегментом - ключ коллекции, а не контроллер массива). Окно палитры должно иметь собственные контроллеры. –

 Смежные вопросы

  • Нет связанных вопросов^_^