Search code examples
objective-ccocoafile-typensdocument

Open any folder with NSDocument


I am trying to write an application that can open any folder in the NSDocument subclass but can't figure out the right Info.plist settings. It is important that my app should not use bundles, neither folders with a particular file extensions, just be able to open any folder.

What I tried:

  • If I set the document type extension to empty string then the file open panel does not allow any file to be selected
  • If I set the document type extension to * then the file open panel does enable all files but not the folders: folders are opened as in finder
  • If I set the folder extension to the document type extension I can open the folder in the file open dialog as a document (this is what I want) but I restrict my solution to the folders with that extension
  • By setting OSType to "fold", document type identifier or name to "public.folder" etc. as I read in regarding forums has no visible effect for me.

How can I open any folder in open file dialog?


Solution

  • You probably can't do this without writing some custom code.

    You need to present an NSOpenPanel manually, like this:

    NSOpenPanel *panel = [NSOpenPanel openPanel];
    [panel setCanChooseFiles:NO];
    [panel setCanChooseDirectories:YES];
    
    [panel beginSheetForDirectory:nil
                             file:nil
                   modalForWindow:[self window]
                    modalDelegate:self
                   didEndSelector:@selector(openPanelDidEnd:returnCode:contextInfo:)
                      contextInfo:nil];
    

    An open panel presented in this way will let the use choose any directory they wish. You can implement NSOpenPanel's delegate methods to validate each folder and en/disable if if you need to.