Правильный ответ здесь не подходит для моего варианта использования, но вопрос подходит. Отсюда и дополнительный ответ.
Мой вариант использования: закрытие документа (который может быть одним из нескольких открытых), но не закрытие приложения.
В этом случае (на момент написания и если я просто смотрю не туда) документация не так полезна, как могла бы.
Я добавил переопределение canCloseDocumentWithDelegate:shouldCloseSelector:contextInfo:
в моем подклассе NSDocument и вызвал в нем супер. В документации не сказано, нужно ли вам вызывать super, но небольшая запись показывает, что система предоставляет селектор и контекст. Этот метод вызывается непосредственно перед закрытием документа.
- (void) canCloseDocumentWithDelegate:(id)delegate shouldCloseSelector:(SEL)shouldCloseSelector contextInfo:(void *)contextInfo;
{
if ([self pdfController])
{
[[[self pdfController] window] close];
[self setPdfController: nil];
}
[super canCloseDocumentWithDelegate:delegate shouldCloseSelector: shouldCloseSelector contextInfo: contextInfo];
}
Существует несколько полезных обсуждений этого метода на CocoaBuilder . Если у этого подхода есть недостатки или более эффективные способы, пожалуйста, прокомментируйте.