No obtienes el éxito / fallan las devoluciones de llamada para compartir la extensión usando AFNetworking

Estoy teniendo un pequeño problema con AFNetworking en una extensión compartida. En the didSelectPost , llamo:

 [[AuthClient shanetworkingClient] POST: @"/v1/events" parameters: params success: ^ (AFHTTPRequestOperation * operation, id responseObject) { [self.extensionContext completeRequestReturningItems: nil completionHandler: nil]; } failure: ^ (AFHTTPRequestOperation * operation, NSError * error) { NSLog(@"error: %@", error); [self.extensionContext cancelRequestWithError: error]; } ]; 

[AuthClient shanetworkingClient] utiliza el patrón singleton para get una instancia de AFHTTPSessionManager con NSURLSessionConfiguration configurada con un identificador de background.

Sin embargo, no se invocan las devoluciones de llamada de éxito o falla y simplemente se cuelga indefinidamente hasta que se destruye la extensión. Curiosamente, la request HTTP termina bien en el lado del server; la finalización nunca se invoca.

Supongo que el problema no es con AFNetworking pero el problema es con esa class de singleton. No especificó la architecture de su aplicación, pero supongo que, puede llamar a varias API en diferentes controlleres de vista utilizando el mismo [AuthClient shanetworkingClient] al mismo time. Por lo tanto, en realidad está recibiendo una llamada de success pero no para la llamada anterior, pero en algún otro lugar de su controller. Me he enfrentado al problema exacto en mi aplicación basada UITabbarController donde estaba haciendo llamadas API en viewDidLoad de diferentes controlleres de vista y mi probador estaba cambiando continuamente todas las tabs. Por lo tanto, intenté get la respuesta para el primer controller de vista (1ª pestaña) y solía get respuesta en el segundo controller de vista (2ª pestaña), ¡lo cual estaba mal!

1) Intente ejecutar esta request en el cartero, para verificar la forma correcta y los parameters, si está bien -> 2.

2) Intenta usar la configuration de session como esta

 NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; // Initialize Session Manager AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:sessionConfiguration]; 

en este punto podemos suponer que su singletone se inicializó para otra request con diferente configuration.

3) problema similar

4) sobre el background AFNetworking

PS Intente utilizar asíncrono simple en el hilo principal, con el spinner mientras espera la respuesta

Algunas cosas que intentaría:

  • Haga una comprobación de cordura con un rastreo de networking; y asegúrese de que los datos que espera lleguen al cliente.
  • Establezca un punto de interrupción y busque cualquier subprocesss o anomalías bloqueadas (incluso considere romper las API de networking de Apple, es decir, CFNetworking o NSURLSession, etc.).
  • Compruebe que los bloques lambda / completion estén siendo correctamente establecidos / retenidos por su object Singleton / intente escribir una simple rutina de testing sin utilizar el singleton para ver si hace una diferencia (por ejemplo, instanciar manualmente la class y usarla).
  • No está claro desde el fragment si el controller de finalización de 'éxito' imprime un post de debugging; considere agregar un NSLog allí también, si uno no está en el controller.

Con suerte, algo de esto puede acercarte a una idea de lo que está causando el problema.