2011-05-10 4 views
6


usando facebook-facebook-ios-SDK-cf1c2c3, el objeto _sessionDelegate se cancela la asignación antes de que mi aplicación se mueve a un segundo plano.método Facebook FBConnect fbDialogLogin en Facebook.m golpea EXC_BAD_ACCESS en FBSessionDelegate objeto _sessionDelegate

Esto significa que cuando la aplicación viene al primer plano después de la devolución de llamada de autenticación/autorización, este método en Facebook.m golpea provoca una EXC_BAD_ACCESS:

- (void)fbDialogLogin:(NSString *)token expirationDate:(NSDate *)expirationDate 

La línea en cuestión en ese método siendo ésta:

if ([self.sessionDelegate respondsToSelector:@selector(fbDidLogin)]) { 
    [_sessionDelegate fbDidLogin]; 
    } 

creo que esto es debido a que en Facebook.h, _sessionDelegate se está asignando no retenido. Por lo tanto, en algún momento se cancela la asignación:

@property(nonatomic, assign) id<FBSessionDelegate> sessionDelegate; 

Si lo cambia a conservar aparezca para resolver el problema:

@property(nonatomic, retain) id<FBSessionDelegate> sessionDelegate; 

parece algo demasiado obvio para mí. ¡Por lo tanto, me falta algo!

¿Alguna idea?

Muchas gracias, xj

Respuesta

1

Cambio del delegado a un método de conservar en este caso es probablemente una solución más estable que cualquier otra cosa. Sin embargo, en algún lugar se lanzará su delegado antes de que desee que se lance y es posible que tenga que ver qué haría que se liberara antes. Sin embargo, si lo hace, asegúrese de editar el método Facebook.m dealloc() para liberar su delegado

+0

Supongo que lo que me interesa es, ¿cuál es el problema subyacente con el SDK de iOS de Facebook, o la forma en que lo estoy usando, que hace que esto suceda? ¿Debería editar el código de muestra de Facebook para corregir un error tan obvio? Tal vez es un problema de configuración. –

0

Tuve el mismo problema EXC_BAD_ACCESS. Lo resolví eliminando otra instancia asignada de rootViewController.

RootViewController *rootViewController = [[RootViewController alloc] init]; <-------- 

facebook = [[Facebook alloc] initWithAppId:kAppId andDelegate:rootViewController]; 

que debe asignarse una sola vez.

eso significa que si vuelve a asignar su controlador raízView y lo empuja/agrega otra viewController conserva su instancia anterior.

Espero que ayude a resolver EXC_BAD_ACCESS.

0

¡En la página de llamadas debe deshabilitar ARC!

+1

esto debería ser un comentario – swiftBoy

Cuestiones relacionadas