2012-08-15 9 views
11

Podążam za tutorialem Facebooka, aby opublikować wiadomość na ścianie użytkownika: http://developers.facebook.com/docs/howtos/publish-to-feed-ios-sdk/ i mimo, że jest wykonana z myślą o projekcie .xib, udało mi się zrobić wszystko dobrze z moim projektem storyboardów. Jednakże doszedłem do punktu, w którym muszę umieścić kod w initWithNibName: bundle: method, ale nie mogę tego zrobić, ponieważ używam storyboard. A ponieważ trudno jest określić, kiedy dokładnie metoda zostanie wywołana, nie mogę po prostu napisać metody o nazwie initWithNibName: bundle: i wywołać ją z innej metody. Jeśli ktoś ma jakiś pomysł na rozwiązanie mojego problemu, powiedz to. Dzięki.Metoda initWithNibName w scenorysie

+0

Stworzyłem prosty projekt w GitHub jako przykład przy użyciu FB SDK + iOS 6 i Storyboards. Aplikacja może publikować na osi czasu: [FB SDK i storyboardy z publikowaniem na kanale] (https://github.com/Belzebul/fb-sdk-storyboards) Mam nadzieję, że może się to przydać. –

Odpowiedz

39

Sam wpadłem na ten problem. Scenorysy wydają się nie używać initWithNibName:bundle:, ale albo initWithCoder:(NSCoder *)aDecoder lublub initWithCoder:(NSCoder *)aDecoder lub initWithCoder:(NSCoder *)aDecoder lub initWithCoder:(NSCoder *)aDecoder.

Wdrożenia domyślne dwóch metod wyglądać następująco:

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

mam jeszcze użyć wersji initWithStyle siebie, ale ja sobie wyobrazić, że to nazywa na UITableViewController. W razie wątpliwości można po prostu dodać obie metody do pliku, wraz z wywołaniem NSLog(), które wypisze nazwę metody (lub dowolny inny unikalny ciąg). Następnie możesz uruchomić go w symulatorze, aby zobaczyć, który jest wywoływany, i usunąć drugi.

Zdecydowanie polecam, aby nie dzwonić pod numer initWithNibName:bundle: z żadnej z pozostałych metod. Lepiej po prostu przenieść kod do właściwej metody.

+0

jedne z najlepszych rad jakie kiedykolwiek widziałem – finneycanhelp

+2

Jeśli storyboard nie korzysta z initWithNib - dlaczego jest tworzony domyślnie podczas dodawania nowej klasy przy użyciu xcode 4.5 i storyboardu? – Dejell

+7

@Odelya Nie jestem pewien, co to za umowa (jest to zdecydowanie mylące). Wygląda na to, że przynajmniej niedopatrzenie zostanie usunięte z domyślnego szablonu (zwłaszcza, że ​​zachęcamy do używania Storyboards). Nie znalazłem żadnego oficjalnego wytłumaczenia tego, chociaż dokumentacja Apple dla 'initWithNibName: bundle:' mówi, że zamiast tego używa się metody 'initWithCoder:' podczas pracy z Storyboards. http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/initWithNibName:bundle: – Kitsune

Powiązane problemy