Я разделил свой интерфейс на различные файлы nib.Программный эквивалент привязки nsarraycontroller к nsobjectcontroller, выбору, содержимому
сейчас, я использую два подкласса nswindowcontroller
с nsarraycontroller
и nsobjectcontroller
IBOutlets. Контроллеры nindindow являются владельцем файла в их соответствующих наконечках.
Контроллеры назначаются в IntefaceBuilder (IB).
ранее в одном кончика пера, я имел привязку от сотрудников nsarraycontroller
для одного сотрудника nsobjectcontroller
, используя controllerkey из «выбора» и modelkeypath от «я»
сейчас, я стараюсь «связывать» их с помощью кода, так как такие
- (IBOutlet) showEmployeeWindow:(id)sender;
//load a window from a nib file.
...
// Get the employee arraycontroller.
NSArrayController *employeesController = [employeesWindowController employeeArrayController];
// Get the selected employee from the employeeS controller
id employee = [empController selection];
//now the employee
NSObjectController *emplController = [singleEmployeeWindowController employeeController];
//Set the content object of the employee controller as the nsset called employees.
[emplController setContent: employee];
//Show the window.
[singleEmployeeWindowController showWindow:sender];
...
}
проблему.
Отладка показывает, что другой адрес памяти для выбранного сотрудника. т.е. линия
id employee = [empController selection];
// Get the selected employee from the employeeS controller
кажется, чтобы получить другой сотрудник.
но Я постоянно вижу первого сотрудника, никогда не выбранного.
выбранный сотрудник никогда не устанавливается в качестве контента - или, точнее, выбранный сотрудник не заменяет первый по умолчанию.
Обратите внимание, что каждый nswindowcontroller
имеет контекст nsmanagedobject
через nsdocument. его владельца файла в наконечнике.
Я был готов понравиться этот ответ, но код, который вы даете, не только даст ошибки, но и обманет других разработчиков. Например, @ "selection.self" неверен на нескольких уровнях. –
Спасибо! Достаточно информации, чтобы помочь мне понять цель каждого из аргументов bind. – RichS
Спасибо, привязка к keyPath «selection.self» вместо «selection» была ключом для моего дела. Вместо «contentObject» я использовал константу «NSContentBinding» в AppKit. – Andrew