2010-04-22 3 views
1

в моем приложении У меня есть NSTableView, связанный с ArrayController (assemblyObjects). У меня также есть Details-View (только некоторые текстовые поля), привязанные к одному и тому же контроллеру (выбор).Какао-привязка: вносить изменения вручную?

Теперь каждый раз, когда я редактирую текстовое поле, изменения автоматически отправляются в ArrayController, а таблица также изменяется. Как я могу избежать этого? То, что я хочу, это «Кнопка отправки». Изменения в данных следует отправлять только контроллеру, когда я нажимаю кнопку, а не автоматически, каждый раз, когда я делаю редактирование.

ответ

2

На этот вопрос действительно два ответа. Первое из них более философское: в большинстве случаев вы хотите, чтобы обновления модели мгновенно возникали. По большей части пользователям не следует беспокоиться о том, чтобы сохранить, совершить и т. Д. Изменить make. Всесторонняя интеграция связывания с NSUndoManager означает, что все, что делает пользователь, может быть отменено (или должно быть отменено). Все действия пользователя должны быть «с низким уровнем риска», так что внесение изменений, а затем отмена не вызывает ненужного «вреда» для данных пользователя или состояния приложения. Если вы используете Core Data для вашего уровня модели, вы всегда можете откатить или сохранить набор изменений программным путем с помощью методов NSManagedObjectContext. Если нет действительно хорошей причиной, почему пользователю нужна кнопка «Отправить», не помещайте ее. В соответствии с этой философией функция Gmail «Отменить отправку». Даже отправка электронной почты должна быть отменена (в пределах разумного).

Второй ответ более практичен. Конечно, есть ситуации, когда вы имеете дело с бэкэнд-системой, которая не так прощает отменить, как Cocoa. В этом случае лучшим вариантом является создание временного модельного объекта, который служит моделью для пользовательского интерфейса (подумайте о модели представления в архитектуре Model-View-View-Model (MVVM)). Когда пользователь отправляет изменения, вы можете скопировать временный объект модели в постоянную модель. В Core Data вы можете использовать постоянное хранилище в памяти, поддерживающее отдельный контекст управляемого объекта, чтобы удерживать эти временные экземпляры, а затем объединить изменения из этого временного контекста в ваш основной контекст при отправке.

0

Это может быть достаточно:

  • Выберите текстовые поля в Interface Builder.
  • Перейдите на панель «Атрибуты текстового поля» панели «Инспектор» (нажмите «Cmd-1»).
  • Измените всплывающее окно Action на «Sent On Enter Only».