Search code examples
objective-ccocoafile-typensdocumentnsapplication

Always appending file extensions in NSDocument


What would be the best way to always ensure the file saved to disk (or iCloud) contains the default file extension for our document format in an NSDocument based Cocoa app?

Background:
Users can load legacy files into the app that still use Type-Creator-Codes.

With auto-saving enabled in our app we need to make sure the file always has the file extension added as soon as it's written back to the disk (following any kind of changes) with our Cocoa app - or the app won't be able to open it (with now neither the type-creator-code nor the file extension).


Solution

  • If I got it right I'd overwrite NSDocumentController's open method

    - (void)openDocumentWithContentsOfURL:(NSURL *)url 
                                  display:(BOOL)displayDocument 
                        completionHandler:(void (^)(NSDocument *document, 
                                                    BOOL documentWasAlreadyOpen, 
                                                    NSError *error))completionHandler {
        if(!url.pathExtension isEqualToString:@"XYZ")
            url = url URLByAppendingPathExtension:@"XYZ"];
        [super openDocumentWithContentsOfURL:url 
                                     display:displayDocument 
                           completionHandler:completionHandler];
    }
    

    NOTE: written inline