2010-12-29 13 views
5

Quiero encapsular todas mis interacciones de Facebook dentro de una clase FacebookFacade para mantener las cosas limpias y ordenadas. Tengo una instancia de la clase de Facebook iOS SDK dentro de mi FacebookFacade.FBRequestDelegate solo funciona en AppDelegate?

Mi problema es que cuando hago una llamada API de gráficos dentro de la fachada, tales como:

[self.facebook requestWithGraphPath:@"me" andDelegate:self]; 

El único método de FBRequestDelegate que es llamada es requestLoading: y nada más. He intentado poner código similar en otros lugares, como en los controladores y otros modelos, y tampoco se llaman a todos los métodos FBRequestDelegate, solo requestLoading:.

De hecho la única manera que puedo conseguir los otros métodos FBRequestDelegate a ser llamados es poner toda mi lógica Facebook en el AppDelegate y hacer mi AppDelegate la FBRequestDelegate.

¿Por qué es este el caso? ¿Me estoy perdiendo de algo? Definitivamente no quiero usar el AppDelegate como mi FBRequestDelegate ya que no quiero confundir el propósito del AppDelegate.

Gracias.

Respuesta

1

Asegúrate de que el objeto inicial no se lanza mientras Facebook está funcionando en segundo plano. Si es así, cuando Facebook va a llamar al delegado y lo encuentra nulo o detecta un error, no devolverá la llamada.

2

Puede compartir su aplicaciónDelegate con los otros controladores en su aplicación.

He resuelto este problema mediante la importación de mi AppDelgate (que crea una instancia y asigna el objeto de facebook en ella) en mi interfaz, es decir

#import "MyAppDelegate.h" 

interface MyViewController: UIViewController <FBRequestDelegate, FBDialogDelegate, FBSessionDelegate> 

De esta manera, puedo crear un puntero que apunte al objeto delegado y usa los métodos de Facebook en donde lo necesito.

-(void) someFunction{ 
     MyAppDelgate *sharedAppDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate] 
     [sharedAppDelegate.facebook dialog:@"feed" andDelegate:self]; 
} 

Vamos a saber si esto no funciona

+0

¡Intenté esto, los delegados en mi controlador de la vista todavía no se llaman! ¿Cómo exactamente configuró su Facebook en el delegado para que pueda usarlo en un controlador de vista? –

7

tenía el mismo problema esta tarde. Finalmente lo resolvió: TIENE que hacer su FBRequest desde el hilo PRINCIPAL. De lo contrario, NSURLConnect subyacente (en el objeto facebook) nunca se inicia.

+0

Dios mío, esto me acaba de salvar. He pasado tanto tiempo depurando esta solicitud de Facebook. ¿Por qué no se menciona esto en su documentación? –

+0

Creo que está más relacionado con NSURLConnection y Run loops. Pero deberían aconsejar realizar solicitudes de gráficos en el hilo principal. – ikarius

Cuestiones relacionadas