Связанный NSTextField не обновляет объект, пока не потеряет фокус - PullRequest
1 голос
/ 06 марта 2012

У меня есть проект Core Data.

По сути, у меня есть NSTableView, куда я добавляю некоторые сущности (используя селектор "add:"), двойной щелчок по TableView открывает новое окно NSWindow, где можно редактироватьсущность, использующая некоторые NSTextFields.Каждое текстовое поле привязано к атрибуту объекта.

Все работает нормально, за исключением того факта, что атрибуты объекта обновляются только тогда, когда текстовое поле теряет фокус.

Если я пишу напервое текстовое поле и затем я перехожу ко второму, моя запись сохраняется, но если я пишу в первом текстовом поле и закрываю окно, я теряю свои изменения .

Как можноЯ обновляю свой основной объект данных, как только я что-то напишу в текстовом поле?Должен ли я использовать textDidChange: ?

--- ОБНОВЛЕНИЕ ---

К сожалению [сохранение контекста] не работает.Если я правильно понимаю, сущность не изменена до тех пор, пока NSTextField не уйдет в отставку первым респондентом.

На данный момент единственным рабочим решением является что-то вроде:

(void)controlTextDidChange:(NSNotification *)aNotification 
{
  NSTextField *tf = [aNotification object];
  [self.window makeFirstResponder:tf];
}

, но этодовольно не элегантный, и в любом случае мне все еще нужно переустановить курсор в конце NSTextField.

Ответы [ 3 ]

1 голос
/ 17 марта 2013

Настройка NSContinuouslyUpdatesValueBindingOption приведет к тому, что модель будет обновляться каждый раз, когда изменяется текстовое поле, что правильно устанавливает флаг «грязный» и приводит к сохранению документа при выходе.

0 голосов
/ 13 сентября 2018

Если у вас его еще нет, вы можете установить делегата в окне и использовать -windowWillClose: или наблюдать NSWindowWillCloseNotification . Затем вы можете вызвать [[notification object] makeFirstResponder:[window initialFirstResponder]], чтобы установить первый респондент окна в качестве первого первого респондента, когда окно закрывается. Это приведет к тому, что элемент управления, являющийся первым респондентом (например, NSTextField), оставит статус первого респондента, и привязка сохранит изменения.

0 голосов
/ 06 марта 2012

Я думаю, вы могли бы использовать DidEndEditing или TextDidChange, другой способ сделать это - манипулирование событием закрытия окна, но я бы не рекомендовал его.

...