Связывание какао: отправить изменения вручную? - PullRequest
1 голос
/ 22 апреля 2010

в моем приложении у меня есть NSTableView, привязанный к ArrayController (ранжированный объект). У меня также есть подробный вид (только некоторые текстовые поля), привязанный к тому же контроллеру (выбор).

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

Ответы [ 2 ]

2 голосов
/ 23 апреля 2010

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

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

0 голосов
/ 23 апреля 2010

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

  • Выберите текстовые поля в Интерфейсном Разработчике.
  • Переключиться на панель «Атрибуты текстового поля» панели «Инспектор» (нажмите Cmd-1).
  • Измените всплывающее окно «Действие» на «Отправлено только при вводе».
...