---
title: NSDocumentController
framework: appkit
role: symbol
role_heading: Class
path: appkit/nsdocumentcontroller
---

# NSDocumentController

An object that manages an app’s documents.

## Declaration

```swift
@MainActor class NSDocumentController
```

## Overview

Overview As the first-responder target of New and Open menu commands, NSDocumentController creates and opens documents and tracks them throughout a session of the app. When opening documents, a document controller runs and manages the modal Open panel. NSDocumentController objects also maintain and manage the mappings of document types, extensions, and NSDocument subclasses as specified in the CFBundleDocumentTypes property loaded from the information property list (Info.plist). You can use various NSDocumentController methods to get a list of the current documents, get the current document (which is the document whose window is currently key), get documents based on a given filename or window, and find out about a document’s extension, type, display name, and document class. In some situations, it’s worthwhile to subclass NSDocumentController in non-NSDocument-based apps to get some of its features. For example, the NSDocumentController management of the Open Recent menu is useful in apps that don’t use subclasses of NSDocument.

## Topics

### Obtaining the Shared Document Controller

- [shared](appkit/nsdocumentcontroller/shared.md)

### Initializing a New NSDocumentController

- [init()](appkit/nsdocumentcontroller/init().md)
- [init(coder:)](appkit/nsdocumentcontroller/init(coder:).md)

### Creating and Opening Documents

- [document(for:)](appkit/nsdocumentcontroller/document(for:)-i5zi.md)
- [duplicateDocument(withContentsOf:copying:displayName:)](appkit/nsdocumentcontroller/duplicatedocument(withcontentsof:copying:displayname:).md)
- [openDocument(withContentsOf:display:completionHandler:)](appkit/nsdocumentcontroller/opendocument(withcontentsof:display:completionhandler:).md)
- [openUntitledDocumentAndDisplay(_:)](appkit/nsdocumentcontroller/openuntitleddocumentanddisplay(_:).md)
- [makeDocument(for:withContentsOf:ofType:)](appkit/nsdocumentcontroller/makedocument(for:withcontentsof:oftype:).md)
- [makeDocument(withContentsOf:ofType:)](appkit/nsdocumentcontroller/makedocument(withcontentsof:oftype:).md)
- [makeUntitledDocument(ofType:)](appkit/nsdocumentcontroller/makeuntitleddocument(oftype:).md)
- [reopenDocument(for:withContentsOf:display:completionHandler:)](appkit/nsdocumentcontroller/reopendocument(for:withcontentsof:display:completionhandler:).md)

### Managing Documents

- [documents](appkit/nsdocumentcontroller/documents.md)
- [addDocument(_:)](appkit/nsdocumentcontroller/adddocument(_:).md)
- [currentDocument](appkit/nsdocumentcontroller/currentdocument.md)
- [document(for:)](appkit/nsdocumentcontroller/document(for:)-a5yd.md)
- [hasEditedDocuments](appkit/nsdocumentcontroller/hasediteddocuments.md)
- [removeDocument(_:)](appkit/nsdocumentcontroller/removedocument(_:).md)

### Managing Document Types

- [documentClassNames](appkit/nsdocumentcontroller/documentclassnames.md)
- [defaultType](appkit/nsdocumentcontroller/defaulttype.md)
- [documentClass(forType:)](appkit/nsdocumentcontroller/documentclass(fortype:).md)
- [displayName(forType:)](appkit/nsdocumentcontroller/displayname(fortype:).md)
- [typeForContents(of:)](appkit/nsdocumentcontroller/typeforcontents(of:).md)

### Autosaving

- [autosavingDelay](appkit/nsdocumentcontroller/autosavingdelay.md)

### Closing Documents

- [closeAllDocuments(withDelegate:didCloseAllSelector:contextInfo:)](appkit/nsdocumentcontroller/closealldocuments(withdelegate:didcloseallselector:contextinfo:).md)
- [reviewUnsavedDocuments(withAlertTitle:cancellable:delegate:didReviewAllSelector:contextInfo:)](appkit/nsdocumentcontroller/reviewunsaveddocuments(withalerttitle:cancellable:delegate:didreviewallselector:contextinfo:).md)

### Responding to Action Messages

- [newDocument(_:)](appkit/nsdocumentcontroller/newdocument(_:).md)
- [openDocument(_:)](appkit/nsdocumentcontroller/opendocument(_:).md)
- [saveAllDocuments(_:)](appkit/nsdocumentcontroller/savealldocuments(_:).md)

### Managing the Open Dialog

- [beginOpenPanel(completionHandler:)](appkit/nsdocumentcontroller/beginopenpanel(completionhandler:).md)
- [beginOpenPanel(_:forTypes:completionHandler:)](appkit/nsdocumentcontroller/beginopenpanel(_:fortypes:completionhandler:).md)
- [runModalOpenPanel(_:forTypes:)](appkit/nsdocumentcontroller/runmodalopenpanel(_:fortypes:).md)
- [currentDirectory](appkit/nsdocumentcontroller/currentdirectory.md)
- [urlsFromRunningOpenPanel()](appkit/nsdocumentcontroller/urlsfromrunningopenpanel().md)

### Managing the Open Recent Menu

- [maximumRecentDocumentCount](appkit/nsdocumentcontroller/maximumrecentdocumentcount.md)
- [clearRecentDocuments(_:)](appkit/nsdocumentcontroller/clearrecentdocuments(_:).md)
- [noteNewRecentDocumentURL(_:)](appkit/nsdocumentcontroller/notenewrecentdocumenturl(_:).md)
- [noteNewRecentDocument(_:)](appkit/nsdocumentcontroller/notenewrecentdocument(_:).md)
- [recentDocumentURLs](appkit/nsdocumentcontroller/recentdocumenturls.md)

### Validating User Interface Items

- [validateUserInterfaceItem(_:)](appkit/nsdocumentcontroller/validateuserinterfaceitem(_:).md)

### Sharing

- [allowsAutomaticShareMenu](appkit/nsdocumentcontroller/allowsautomaticsharemenu.md)
- [standardShareMenuItem()](appkit/nsdocumentcontroller/standardsharemenuitem().md)

### Handling Errors

- [presentError(_:)](appkit/nsdocumentcontroller/presenterror(_:).md)
- [presentError(_:modalFor:delegate:didPresent:contextInfo:)](appkit/nsdocumentcontroller/presenterror(_:modalfor:delegate:didpresent:contextinfo:).md)
- [willPresentError(_:)](appkit/nsdocumentcontroller/willpresenterror(_:).md)

## Relationships

### Inherits From

- [NSObject](objectivec/nsobject-swift.class.md)

### Conforms To

- [CVarArg](swift/cvararg.md)
- [Copyable](swift/copyable.md)
- [CustomDebugStringConvertible](swift/customdebugstringconvertible.md)
- [CustomStringConvertible](swift/customstringconvertible.md)
- [Equatable](swift/equatable.md)
- [Escapable](swift/escapable.md)
- [Hashable](swift/hashable.md)
- [NSCoding](foundation/nscoding.md)
- [NSMenuItemValidation](appkit/nsmenuitemvalidation.md)
- [NSObjectProtocol](objectivec/nsobjectprotocol.md)
- [NSUserInterfaceValidations](appkit/nsuserinterfacevalidations.md)
- [NSWindowRestoration](appkit/nswindowrestoration.md)
- [Sendable](swift/sendable.md)

## See Also

### Documents

- [Developing a Document-Based App](appkit/developing-a-document-based-app.md)
- [NSDocument](appkit/nsdocument.md)
- [NSPersistentDocument](appkit/nspersistentdocument.md)
