Problemas al agregar actividad personalizada a UIActivityController

Estoy tratando de implementar una actividad personalizada para las actividades estándar (Imprimir, Correo, FaceBook, etc.) pero por ahora solo quiero la Impresión estándar (para AirPrint) y mi propia impresión personalizada por un método directo. Obviamente me estoy perdiendo algo fundamental ya que ninguno de los métodos en mi clase personalizada ha sido llamado. Por ahora solo tengo alguna declaración NSLog para averiguar la secuencia de llamada y para que funcione el marco.

El siguiente es mi código de prueba para la clase de actividad personalizada:

//  PrintActivity.h

#import <UIKit/UIKit.h>

@interface PrintActivity : UIActivity

@end

Y ellos

#import "PrintActivity.h"

@interface PrintActivity ()
@property (nonatomic, strong) UIWebView *dummyWebView;
@end

@implementation PrintActivity

- (NSString *)activityType {
    NSLog(@"activityType");
    return @"MetriScan Print";
}

- (NSString *)activityTitle {
    NSLog(@"activityTitle");
    return @"MetriScan\nPrint";
}

- (UIImage *)activityImage {
    NSLog(@"activityImage");
    UIImage *icon = [UIImage imageNamed:@"metriscan_57_c2a_3.png"];
    return icon;
}

- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems {
    NSLog(@"canPerformWithActivityItems");
    return YES;
}

- (void)prepareWithActivityItems:(NSArray *)activityItems {
    NSLog(@"prepareWithActivityItems");
}

- (void)performActivity {
    NSLog(@"Do the actual printing here");
// My custom code here

}

Y esta es la invocación en la rutina principal:

- (IBAction)printReport:(UIBarButtonItem *)sender {
    NSLog(@"Print Report");

    PrintActivity *metriscanPrint = [[PrintActivity alloc] init];

    UIViewPrintFormatter *printFormatter = [self.webView viewPrintFormatter];

    NSArray *activityItems = [NSArray arrayWithObjects:printFormatter, nil];
    NSArray *appActivities = [NSArray arrayWithObjects:metriscanPrint, nil];
    UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:appActivities];
    //activityController.excludedActivityTypes = [NSArray arrayWithObjects:UIActivityTypePostToFacebook, UIActivityTypePostToTwitter, UIActivityTypePostToWeibo, UIActivityTypeMail, UIActivityTypeMessage, nil];
    activityController.completionHandler = ^(NSString *activityType, BOOL completed) {
        sender.enabled = YES;
    };

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        [self presentViewController:activityController animated:YES completion:nil];
    } else {
        sender.enabled = NO;
        self.printPop = [[UIPopoverController alloc] initWithContentViewController:activityController];
        [self.printPop presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
    }

Como dije, no se llama a ninguno de los métodos de la clase personalizada, pero los iconos de Correo, Mensajes y Copias del sistema se muestran en la hoja de actividades y no en el icono Imprimir. Esperaba solo el sistema Imprimir el icono (y el mío).

Si elimino el comentario del bloque superior de sentencias (y comento los elementos NSArray * activityItems ...........) más abajo, los iconos de correo, mensaje, impresión y copia del sistema. En este experimento, creo que estoy mezclando diferentes métodos al crear mi propio formateador, ¿pero esa parece ser la sugerencia en WWDC 2012?

Si luego descomento la línea con 'excludeActivityTypes' solo obtengo el ícono Imprimir del sistema.

Agradecería cualquier información que me ayude a resolver esto.

Y si alguien sabe de algún código de ejemplo para hacer lo que quiero, sería fantástico.

Editar: Código actualizado a mi código de trabajo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta