2012-12-02 2 views
2

Когда пользователь создает новый документ в моем приложении для какао NSDocument, я хочу, чтобы окно нового документа отображало лист, в котором пользователь может установить некоторые параметры исходного документа.Показать лист для нового окна документа

Этот лист не должен отображаться, однако, когда существующий документ загружается через File> Open.

Есть ли какой-либо существующий механизм, который я могу использовать для реализации этого? Или любой рекомендуемый способ сделать это?

ответ

3

Джей правильно указан в his answer, что для того, чтобы определить, является ли экземпляр NSDocument подкласса нового документа, а не загруженным из файла одного, initWithType:error: должен быть переопределен, который только вызывается для новых документов. Но начало листа там не будет работать, к сожалению, поскольку окно еще не создано в точке initWithType:error:.

Недопустимая ссылка, чтобы получить эту работу, должна вместо этого установить переменную экземпляра, например, например. newDocument - YES в initWithType:error:. Фактический вызов [NSApp beginSheet:…], тогда, должен быть сделан в windowDidBecomeKey:. Кроме того, переменная newDocument должна быть установлена ​​на NO там, чтобы предотвратить повторное появление листа каждый раз, когда окно снова становится ключом.

+0

Хороший ответ; это очень хорошо для меня. :) ... в некоторых случаях может потребоваться проверить, существуют ли параметры документа, а затем вскрыть лист, даже для загруженных документов (но только один раз, конечно) –

3

Переопределить initWithType:error: в вашем подклассе NSDocument.
Из документации (см NSDocument Class Reference):

Вы можете переопределить этот метод для выполнения инициализации, которые необходимо выполнить при создании новых документов, но не следует делать при открытии существующих документов.

+0

Спасибо! Где я могу поместить вызов метода «beginSheet ...» моего листа? Если я поместил его в 'initWithType: error:', лист будет отображаться в собственном окне, не прикрепленном к окну документа в виде листа. – tajmahal

Смежные вопросы