aplicación de time de ejecución agregado: openURL no dispara

Por alguna razón, desarrollo una biblioteca estática para la connection de Facebook.

Para una aplicación de URL apropiada autorizada por el process, debería tener la aplicación (BOOL): (UIApplication *) application openURL: (NSURL *) url sourceApplication: (NSString *) sourceApplication annotation: (id) annotation

método. Así que cuando lo codifico en el file appDelegate.mm todo funciona bien, el método invoca y la session de Facebook se autoriza. Pero tengo que agregar este método para delegar en time de ejecución, así que uso el código siguiente:

{ NSString* methodDescription; methodDescription = @"B@:@@@@"; UIApplication* app = [UIApplication shanetworkingApplication]; bool res = class_addMethod([app.delegate class], @selector(application:openURL:sourceApplication:annotation:), (IMP)applicationIMP, [methodDescription UTF8String]); NSLog(@"Result of add method is %d", res); } 

// aquí está la implementación de un nuevo método:

  bool applicationIMP(id self, SEL _cmd, UIApplication *application, NSURL *url, NSString *sourceApplication, id annotation) { NSLog(@"Log from applicationIMP injected method"); return [[LibSocial shanetworkingInstance] FacebookHandleOpenURL:url]; } 

este código agrega método con éxito (veo este método cuando llama class_copyMethodList): 2013-02-04 23: 02: 00.704 LibSocialTest [38167: 19a03] Mathod [0] es la aplicación: openURL: sourceApplication: anotación:

Pero Facebook SDK no dispara este método después de la authentication, y obtuve FBSessionState FBSessionStateClosedLoginFailed.

¿Por qué este método no se activó?

Actualización: incluso si reemploop el método implementado normalmente con la implementación personalizada en time de ejecución, todo funciona bien y el SDK de Facebook dispara la implementación del nuevo método. Pero si no codifique normalmente este método, pero lo agrego en time de ejecución, no es un incendio.

Update2 Si agrego el método a la class appDelegate antes de crear una instancia de UIApplication (en el file main.m), entonces el método inyectado funciona (incluso si no hay una implementación pnetworkingeterminada del método en el file appDelegate.mm), pero si inyecto el método después de crear UIApplication (para También se creó la instancia de la class appDelegate), entonces la inyección del método no afecta a las instancias de la class ya instanciadas.