メソッドを使用する必要がある場合について説明していただけますか? また、どのような状況でどの方法を使用する必要がありますか? 今、私はどれが機能するかをテストし、それを使用します(はい、私は初心者です)..ありがとう。私はMAC用に開発しています。
2 に答える
まず、awakeFromNib と windowDidLoad を自分で呼び出さないでください。これらをカスタム クラスに実装すると、Cocoa が適切なタイミングでそれらを呼び出します。
awakeFromNib は、ウィンドウやウィンドウ コントローラだけでなく、nib アーカイブからロードされたすべてのオブジェクトに対して機能します。セットアップを行うのに適した一般的な場所です。安全ですが (オブジェクトが完全にロードされ、init 呼び出しから戻り、すべてのアウトレットが設定されていることが保証されます)、まだかなり早い段階です。
windowDidLoad (および windowWillLoad) は、nib アーカイブからロードされたか、オンザフライで作成されたかにかかわらず、すべてのウィンドウで機能します。ただし、ウィンドウで呼び出されるのではなく、ウィンドウのコントローラーで呼び出されます。(通常、独自の NSWindow サブクラスを作成するのではなく、独自の NSWindowController サブクラスを作成します。) ロードされるウィンドウに依存するセットアップ コードがある場合は、ここに配置する必要があります (ただし、単純な場合にはそれほど重要ではありません)。ウィンドウ プロパティにアクセスしようとするとすぐに作成されるためです)。
initWithWindow: はあなたが自分自身と呼んでいるものですが、初心者の Cocoa プログラマーはおそらくそうしたくないでしょう。
おそらく、Xcode に付属するガイドのいくつかを読む必要があります。ドキュメントベースのアプリが必要な場合は、「ドキュメントベースのアプリ プログラミング ガイド for Mac」から始めてください。単一ウィンドウのユーティリティ アプリが必要な場合でも、MVC などについて学習する必要があるため、実際には、最初にドキュメント ベースのアプリを作成して方法を学習することをお勧めします。
また、イベントのシーケンスを理解したい場合は、可能な限りすべてのメッセージをオーバーライドし、NSLog(@"%s", __FUNCTION__); のようなものを追加します。そしてあなたのsyslogはすべてを明らかにします。
NIB の間initWithWindow
、ウィンドウが NIB からアーカイブ解除された直後に、アーカイブ解除が呼び出されます。これは、ウィンドウ コントローラーが初期化される場所です。アーカイブ解除プロセス全体が完了すると、ウィンドウ コントローラーと UIView 要素の準備が整ったことを意味しますawakeFromNib
。この時点までは、windowController がないか、アーカイブ プロセス全体が完了していません。
ウィンドウコントローラーで行う[label setStingValue]
とawakeFromNib
、さらにビューオブジェクトと関連するコンテキストの準備が整います。