2012-04-05 13 views
8

Mam podklasę NSViewController, która ładuje swój widok z końcówki (z initWithNibName: bundle: i jest właścicielem pliku tej końcówki).Najlepszy sposób konfigurowania NSViewController inicjalizowanego za pomocą initWithNibName: bundle :?

muszę zrobić jakiś inicjalizacji po stalówka jest załadowany i chcę mojego kodu jest najbardziej kompatybilny:

  • w iOS: Jest to metoda viewDidLoad to zrobić
  • W OSX: W irbis, nie ma metody jak viewDidLoad ale awakeFromNib nazywa na właściciela pliku piszącej zbyt

Więc moje pytania to:

  1. Czy awakeFromNib jest wywoływany również na właścicielu pliku stalówki w Lion?
  2. Jeśli używam awakeFromNib, czy muszę wywołać [super awakeFromNib]? (czy NSViewController implementuje awakeFromNib?)
  3. Jeśli odpowiedź 1 brzmi TAK, czy jest to dobre rozwiązanie? :
- (void)initAfterNibLoaded { 
    ... 
} 

- (void)viewDidLoad { 
    // Code for ios 
    [self initAfterNibLoaded]; 
} 

- (void)awakeFromNib { 
    // Code for osx 

    // Not sure if necessary 
    [super awakeFromNib]; 

    [self initAfterNibLoaded]; 
} 

Jeśli odpowiedź brzmi NIE 1, jest to dobre rozwiązanie? :

- (void)viewDidLoad { 
    // Initialize after nib loaded 
} 

#ifndef TARGET_OS_IPHONE 
- (void)loadView { 
    // Call parent method 
    [super loadView]; 

    // Simulate viewDidLoad method 
    [self viewDidLoad]; 
} 
#endif 

Dziękuję

+0

Ponieważ NSViewController nie jest obecny w UIKit, nie jestem pewien, dlaczego generalizujesz na wszystkich platformach. –

+0

Tak, ale chcę zrobić mniej modyfikacji możliwe w kodzie, jeśli muszę przenieść go do ios. Zmiana klasy nadrzędnej z NSViewController na UIViewController nie jest wielką sprawą, ale wolę uniknąć wielu błędów, ponieważ niektóre metody są wywoływane w ios, a nie w osxie i na odwrót. – Johnmph

+0

Odpowiedź jest oczywiście jQuery. –

Odpowiedz

4

Oto co znalazłem:

  1. Tak, awakeFromNib: nazywa się również na właściciela pliku piszącej w Lion (i zwykle jest taki sam dla nowy Mountain Lion).

  2. Zaczynając na OSX 10.6, nie jest kategorią na NSObject który dodaje awakeFromNib, więc jest to bezpieczne, aby zadzwonić [super awakeFromNib] z dowolnej podklasy. W przypadku OSX przed 10.6, możemy użyć instancesRespondToSelector: aby dowiedzieć się, czy klasa nadrzędna implementuje awakeFromNib, podklasa NSView lub NSObject nie może wywoływać [super awakeFromNib].

Powiązane problemy