Как отменить сохранение настроек при использовании привязок Какао? - PullRequest
3 голосов
/ 26 декабря 2009

Я только начинаю связываться с привязками. Я начал реализовывать диалог настроек, привязывая некоторые NSColorWell к контроллеру общих настроек по умолчанию. Это работает отлично. Мои значения закодированы и сохранены правильно.

Однако, то, что не работает, отменяется из диалога. Если я отменяю, значения сохраняются.

Кажется, что я должен привязать кнопку отмены к "revert" NSUserDefaultController, но, конечно, если я это сделаю, я не смогу привязать его к "executeClose" (если только нет способа привязать кнопку к нескольким действия, о которых я не знаю).

Что я должен связывать кнопку отмены, чтобы отменить изменения и закрыть окно. Очевидно, что я мог бы сделать это, написав метод действия, который выполняет оба действия, но кажется, что это возможно только в IB.

1 Ответ

7 голосов
/ 26 декабря 2009

Две вещи:

Во-первых, по соглашению, настройки в Mac OS X применяются сразу после внесения изменений. Там нет «отменить» или «применить» для изменения настроек (как в Windows). Нет ничего необычного в том, чтобы иметь кнопку «по умолчанию», которая сбрасывает настройки, но не отменяет, поскольку изменения применяются немедленно. Заставить работать настройки вашего приложения, в противном случае это немного странно, так как не соответствует соглашениям.

Во-вторых, поскольку вы напрямую изменяете эти значения с помощью привязок (так же, как если бы вы использовали механизм цели / действия), вы не оставляете себе возможность отказаться от изменений. Здесь лучше всего создать контроллер словаря, содержимое которого является копией настроек вашего приложения. Редактирование будет происходить в этом словаре. Если пользователь отменяет, вы просто отбрасываете словарь. Если пользователь принимает изменения, вы скопируете настройки в словаре в действительные настройки приложения, а затем отмените их. Если вам необходимо «буферизовать» настройки приложения, это хороший способ сделать это, продолжая использовать привязки для привязки пользовательского интерфейса к настройкам, но вы по-прежнему отвечаете за применение изменений, когда пользователь принимает.

...