Как изменить состояние кнопки закрытия окна в Cocoa?

В приложениях Cocoa вы часто видите небольшую красную точку в кнопке закрытия окна, когда у вас есть несохраненные данные; TextEdit - хороший пример этого. Я просмотрел документацию Cocoa, но не могу найти способ программно установить это состояние. Я уверен, что есть очень простой способ сделать это, но, очевидно, я что-то пропустил.

Ответы

Ответ 1

Чтобы установить его программно, вы можете использовать метод -setDocumentEdited: для NSWindow. Если вы пишете приложение на основе документов, NSDocumentManager должен автоматически обнаруживать, когда есть несохраненные изменения в NSUndoManager, связанные с текущим NSDocument.

Ответ 2

Зависит от того, какое приложение вы создаете. Если он основан на NSDocument, используйте метод NSDocument updateChangeCount:. Если вы только что получили NSWindowController, используйте setDocumentEdited:. NSWindow имеет метод setDocumentEdited:, если все, что у вас есть, это NSWindow.

Ответ 3

Кроме того, в 10.6 "setDocumentEdited" отмечает приложение как грязное, и поэтому его нельзя быстро убить. Если вы этого не вызываете и установите флаг в Info.plist(см. Что нового в 10.6)

<key>NSSupportsSuddenTermination</key>
<string>YES</string>

Таким образом, если ваше приложение работает (но не является грязным), Mac OS X может просто убить его, а не вызывать вежливые запросы на завершение работы. Если ваш документ отмечен как грязный (или окно), то он завершит обычный процесс отключения приложения, чтобы закрыть его.