2010-12-29 5 views
5

Chcę hermetyzować wszystkie moje interakcje z Facebookiem w klasie FacebookFacade, aby wszystko było czyste i uporządkowane. Mam instancji klasy iOS SDK na Facebooku w mojej FacebookFacade.FBRequestDelegate działa tylko na AppDelegate?

Moim problemem jest to, że kiedy robię wykres wywołanie API w elewacji, takich jak:

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

Jedynym sposobem FBRequestDelegate że jest wywoływana jest requestLoading: i nic więcej. Próbowałem umieścić podobny kod w innych miejscach, jak w kontrolerach i innych modelach, i tam też nie wszystkie metody FBRequestDelegate są wywoływane, tylko requestLoading:.

W rzeczywistości jedynym sposobem mogę dostać inne FBRequestDelegate metod być nazywany jest umieścić wszystkie moje logikę Facebook w AppDelegate i uczynić mój AppDelegateFBRequestDelegate.

Dlaczego tak się dzieje? Czy coś mi umyka? Zdecydowanie nie chcę używać AppDelegate jako mojego FBRequestDelegate, ponieważ nie chcę mylić celu AppDelegate.

Dzięki.

Odpowiedz

1

Upewnij się, że początkowy obiekt nie jest zwalniany, podczas gdy facebook działa w tle. Jeśli tak, kiedy Facebook zadzwoni do delegata i wykryje brak lub błąd, nie oddzwoni.

2

Możesz udostępniać appDelegate innym kontrolerom w aplikacji.

I rozwiązać ten problem poprzez importowanie mój AppDelgate (który tworzy wystąpienie i przydziela obiekt facebook w niej) do mojego interfejsu, czyli

#import "MyAppDelegate.h" 

interface MyViewController: UIViewController <FBRequestDelegate, FBDialogDelegate, FBSessionDelegate> 

ten sposób można utworzyć wskaźnik do punktu do obiektu delegowanego i użyj metod facebookowych tam, gdzie ja potrzebuję.

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

Daj mi znać, jeśli to nie zadziała

+0

Próbowałem tego, delegaci w moim kontroler widoku nadal nie są wywoływani! Jak dokładnie skonfigurowałeś swój facebook w delegacie, abyś mógł go użyć w kontrolerze widoku? –

7

miał ten sam problem po południu. W końcu rozwiązany: Musisz wykonać swój FBRequest z wątku MAIN. W przeciwnym razie ukryty NSURLConnect (w obiekcie na Facebooku) nigdy się nie uruchamia.

+0

O mój Boże, właśnie to mnie uratowało. Spędziłem tyle czasu na debugowaniu tej prośby na Facebooku. Dlaczego nie jest to wspomniane w ich dokumentacji? –

+0

Myślę, że jest bardziej związany z NSURLConnection i Run loop. Ale powinni doradzić, aby wykonać grafy na głównym wątku. – ikarius