У меня следующая ситуация:
- Внутри первого окна есть один пользовательский вид, содержащий NSTableView.
- Существует второе окно, которое выступает в качестве формы для текущего объекта за выделением представления таблицы внутри первого окна.
Некоторые подробности:
- Я реализовал setDoubleAction: поведение в NSTableView, которое в основном открывает второе окно
- Представление таблицы связано с упорядоченными объектами (подкласса) NSArrayController
- Определенные элементы интерфейса во втором окне (которое открывается по двойному щелчку) привязаны к выбору NSArrayController
- Я переклассифицировал NSArrayController и изменил следующие функции:
Сначала я изменил addObject: (или add:, это не имеет значения):
- (void)addObject:(id)object
{
[super addObject:object];
[self saveTemplatesToDisk];
}
Затем я изменил удалить:
- (void)remove:(id)sender
{
[super remove:sender];
[self saveTemplatesToDisk];
}
- Действие, открывающее лист настроек, это всего лишь один вкладыш:
[NSApp beginSheet:preferenceWindow modalForWindow:[_preferenceView window] modalDelegate:nil didEndSelector:NULL contextInfo:NULL];
- Код, который выполняется после того, как пользователь нажал клавишу возврата / кнопку OK, также не сложен.
Он просто сохраняет текущее содержимое контроллера массива на диск и закрывает второе окно:
- (IBAction)endPreferenceSheet:(id)sender
{
[templateArrayController saveTemplatesToDisk];
[NSApp endSheet:preferenceWindow];
[preferenceWindow orderOut:nil];
}
Наконец вот моя проблема / вопрос
Когда я нажимаю клавишу возврата во втором окне, окно закрывается, данные сохраняются, и NSTableView корректно перезагружается без какого-либо дальнейшего взаимодействия. Но когда я нажимаю кнопку ОК с помощью мыши, кажется, ничего не происходит. Вот интересная часть: когда я теперь выбираю другую строку в табличном представлении в первом окне после исчезновения второго окна, ранее выбранная строка (читай: обновленный объект) корректно перезагружается и отображает содержимое, которое я отредактировал во втором окно с элементами интерфейса, привязанными к выделению.
В основном моя реализация работает, но не тогда, когда пользователь использует мышь, чтобы закрыть окно.
Единственное отличие, которое я могу заметить, - это currentEvent, но я не представляю, как это может изменить поведение этого простого приложения.
- Когда я нажимаю кнопку ОК с помощью мыши:
NSEvent: type=LMouseUp loc=(563.055,30.1484) time=58450.2 flags=0 win=0x0 winNum=5371 ctxt=0x0 evNum=8093 click=1 buttonNumber=0 pressure=0 subtype=NSTabletPointEventSubtype deviceID=0 x=19469 y=15838 z=0 buttons=0x0 pressure=0.000000 tilt={0.453108, -0.140629} rotation=0.000000 tangentialPressure=0.000000 vendor1-3=(0, 0, 0)
- Когда я нажимаю клавишу возврата:
NSEvent: type=KeyDown loc=(0,300) time=58474.8 flags=0 win=0x0 winNum=5371 ctxt=0x0 chars="
" unmodchars="
" repeat=0 keyCode=36
Есть идеи, как решить мою проблему?