macos operating-system osx-yosemite nssavepanel nspanel

macos - NSSavePanel se bloquea en Yosemite



operating-system osx-yosemite (2)

La solución alternativa de El Capitan + Yosemite es evitar agregarla con addSaveOptionsAccessoryViewToSavePanel, pero usar addSaveOptionsToView + actualizar manualmente la extensión con allowedFileTypes

var saveOptions = IKSaveOptions() var imageUTType = kUTTypeTIFF var imageProperties: NSDictionary = Dictionary<String, String>() var panel : NSSavePanel? internal func prepareExportSavePanel(savePanel : NSSavePanel) -> Bool { panel = savePanel saveOptions = IKSaveOptions(imageProperties: imageProperties as! [NSObject : AnyObject], imageUTType: imageUTType as String) saveOptions.delegate = self savePanel.accessoryView = NSView(frame: NSRect(x: 0, y: 0, width: 500, height: 200)) saveOptions.addSaveOptionsToView(savePanel.accessoryView) return true } override func saveOptions(saveOptions: IKSaveOptions!, shouldShowUTType utType: String!) -> Bool { if (utType == "com.ilm.openexr-image") { return false } return true } func saveOptionsChanged(sender : AnyObject) { imageProperties = saveOptions.imageProperties imageUTType = saveOptions.imageUTType panel?.allowedFileTypes = [imageUTType as String] }

Estoy usando NSSavePanel para guardar la imagen.

He usado IKSaveOption que se agrega al NSSavePanel. Cuando el panel de salvar intenta abrir la hoja para la ventana, se bloquea diciendo:

*** Error de aserción en - [IKSaveOptionsContainer _didChangeHostsAutolayoutEngineTo:], /SourceCache/AppKit/AppKit-1343.14/Layout.subproj/NSView_Layout.m:577 - Debe traducir el aumento de la máscara en restricciones si _didChangeHostsAutolayoutEngineTo: YES.

Estoy siguiendo este código:

NSSavePanel *savePanel = [NSSavePanel savePanel]; [savePanel setDirectoryURL:[NSURL URLWithString:NSHomeDirectory()]]; [savePanel setDelegate:self]; [savePanel setPrompt:NSLocalizedString(@"save",nil)]; [savePanel setAllowedFileTypes:[NSArray arrayWithObjects:@"png",@"jpeg",nil]]; IKSaveOptions * opt = [[IKSaveOptions alloc] initWithImageProperties:nil imageUTType:(NSString *)kUTTypePNG]; [opt addSaveOptionsAccessoryViewToSavePanel:savePanel]; [savePanel setExtensionHidden:NO]; [savePanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result){..... }

Este código funciona en Maverick, pero no en Yosemite. ¿Hay algún cambio de diseño en la nueva API del sistema operativo?


Actualización2: la solución resulta ser simple.

[self.saveOptions addSaveOptionsAccessoryViewToSavePanel:savePanel]; savePanel.accessoryView.translatesAutoresizingMaskIntoConstraints = YES;

Actualización: la solución siguiente no cambia la extensión del nombre de archivo y, dependiendo de cómo guarde el archivo, es posible que no se respete la nueva solicitud de formato.

Encontré una solución, y archivé un error con Apple (20595916). La solución alternativa no es excelente porque el tamaño de la supervista podría ser inadecuado y recortar los controles para las opciones de imagen.

NSView* view = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 400, 200)]; view.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; savePanel.accessoryView = view; [self.saveOptions addSaveOptionsToView:view];