2012-04-05 14 views
8

tôi có một lớp con của NSViewController tải chế độ xem của nó từ một nib (với initWithNibName: bundle: và nó là chủ sở hữu của tệp của ngòi đó).Cách tốt nhất để thiết lập NSViewController được khởi tạo với initWithNibName: bundle :?

tôi cần phải làm một số khởi tạo sau khi ngòi bút được nạp và tôi muốn mã của tôi là tương thích nhất:

  • Trong ios: Có phương pháp viewDidLoad để làm điều đó
  • Trong OSX: Trong báo tuyết, không có phương pháp như viewDidLoad nhưng awakeFromNib đang kêu gọi chủ sở hữu của tập tin của ngòi quá

Vì vậy, câu hỏi của tôi là:

  1. AwakeFromNib có được gọi là chủ sở hữu tập tin của ngòi trong Lion không?
  2. Nếu tôi sử dụng awakeFromNib, tôi có cần gọi [super awakeFromNib] không? (là NSViewController thực hiện awakeFromNib?)
  3. Nếu câu trả lời 1 là CÓ, đây có phải là giải pháp tốt không? :
- (void)initAfterNibLoaded { 
    ... 
} 

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

- (void)awakeFromNib { 
    // Code for osx 

    // Not sure if necessary 
    [super awakeFromNib]; 

    [self initAfterNibLoaded]; 
} 

Nếu câu trả lời là KHÔNG 1, đây là một giải pháp tốt? :

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

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

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

Cảm ơn bạn

+0

Vì NSViewController không có trong UIKit, tôi không chắc tại sao bạn đang khái quát trên các nền tảng. –

+0

Có nhưng tôi muốn thực hiện sửa đổi ít hơn trong mã nếu tôi cần chuyển nó sang ios. Thay đổi lớp cha mẹ từ NSViewController để UIViewController không phải là một việc lớn nhưng tôi thích tránh có rất nhiều lỗi vì một số phương pháp được gọi là trong ios và không phải trong osx hoặc ngược lại. – Johnmph

+0

Câu trả lời rõ ràng là jQuery. –

Trả lời

4

Dưới đây là những gì tôi tìm thấy:

  1. Vâng, awakeFromNib: được gọi là cũng vào chủ sở hữu của tập tin của ngòi trong Lion (và thường đó là tương tự cho Sư tử núi mới).

  2. Bắt đầu từ trên OSX 10.6, có một loại trên NSObject có thêm awakeFromNib, vì vậy nó an toàn để gọi [super awakeFromNib] từ bất kỳ lớp con. Đối với OSX trước 10.6, chúng tôi có thể sử dụng instancesRespondToSelector: để biết liệu lớp cha có triển khai awakeFromNib hay không, lớp con NSView hoặc NSObject không được gọi [super awakeFromNib].