AirPrint: establece la impresora pnetworkingeterminada en UIPrintInteractionController

Necesito una forma de forzar la impresora seleccionada en UIPrintInteractionController cuando se presente, utilizando un ID de impresora ya conocido.

NOTA: Para hacer testings, estoy usando Printopia instalado en mi "MacBook Pro" que comparte la "Impresora"

He hecho esta testing:

-(IBAction)print:(id)sender { UIPrintInteractionController *controller = [UIPrintInteractionController shanetworkingPrintController]; UIPrintInteractionCompletionHandler completionHandler = ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) { NSLog(@"Selected Printer ID: %@",printController.printInfo.printerID); }; NSString* path = [[NSBundle mainBundle] pathForResource:@"TestImage" ofType:@"png"]; NSURL* imageURL = [NSURL fileURLWithPath:path isDirectory:NO]; UIPrintInfo *printInfo = [UIPrintInfo printInfo]; printInfo.outputType = UIPrintInfoOutputPhoto; printInfo.jobName = @"Image print"; controller.printInfo = printInfo; controller.printingItem = imageURL; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { [controller presentFromBarButtonItem:self.printButton animated:YES completionHandler:completionHandler]; // iPad } else { [controller presentAnimated:YES completionHandler:completionHandler]; // iPhone } } 

Cuando finalice la printing, la aplicación registra la siguiente ID de impresora:

 \032Printer\032@\032MacBook\032Pro._ipp._tcp.local. 

Quiero anular la impresora, así que debería hacerlo de esta manera:

 UIPrintInfo *printInfo = [UIPrintInfo printInfo]; printInfo.printerId = @"\032Printer\032@\032MacBook\032Pro._ipp._tcp.local."; controller.printInfo = printInfo; 

Pero por alguna razón no funciona, UIPrintInteractionController no selecciona la impresora como se esperaba, pero la impresora se muestra en la list de impresoras.

Creo que el problema son los extraños caracteres presentes en la ID de la impresora.

¿Alguien sabe cómo se codifica el printInfo.printerId y cómo configurarlo manualmente?

Si almaceno la impresora NSString * en un ivar y la configura nuevamente en la siguiente acción de printing, funciona, pero no puedo forzar una impresora pnetworkingeterminada con la Id de la impresora manualmente.


btw: Obviamente, si la impresora no está disponible / accesible, sé que no se puede seleccionar …

Para configurar la impresora pnetworkingeterminada mediante progtwigción, solo debe configurar el ID de la impresora de printInfo en ._ipp._tcp.local. El nombre de la impresora debe ser exactamente el mismo que el que se muestra en la list de impresoras en el popover UIPrinterInteractionController. Por ejemplo, para una impresora que se muestra como LANIERCOLOR315 [00: 80: A3: 95: 2D: 41] , el ID de la impresora es LANIERCOLOR315 [00:80:A3:95:2D:41] LANIERCOLOR315 [00:80:A3:95:2D:41]._ipp._tcp.local . No tiene que codificar los caracteres especiales. El marco lo hará.