As a change of pace, I thought I’d post some code that doesn’t go out of its way to be bad.
JAMultiTypeSavePanelController is a class (abstracted from ImageIO Export for Acorn) to handle the case where you want to offer the user a choice of formats to save in.
It wraps an
NSSavePanel and handles all the UTI and extension details. You can provide a customised
NSSavePanel or let the controller create one. The only restriction is that the controller appropriates the accessory view. Usage is similar to
NSArray *types = [NSArray arrayWithObjects:@"com.apple.rtfd", @"public.rtf", @"public.plain-text", nil]; JAMultiTypeSavePanelController *controller = [JAMultiTypeSavePanelController controllerWithSupportedUTIs:types]; controller.autoSaveSelectedUTIKey = @"document format"; // Optional: preferences key for selected type. controller.sortTypesByName = NO; // Optional: show in specified order instead of alphabetically by display name.
[controller beginSheetForDirectory:nil file:@"untitled 42" modalForWindow:docWindow modalDelegate:self didEndSelector:@selector(savePanelDidEnd:returnCode:contextInfo:) contextInfo:nil];
-runModalForDirectory:file: is also supported.
Code (MIT/X11 license)