5

Interface Builder を使用して、テキスト ビューのアウトレットをセットアップしました。テキストビューは正常に読み込まれますが、アウトレットが常にnil.

いつインスタンス化されますか?私applicationDidFinishLoadingが呼び出された後でも、それはまだ「生きていない」またはアーカイブされていません。

4

2 に答える 2

11

アウトレットは変数 (またはプロパティ) であるため、インスタンス化されません。

awakeFromNibnib 内のオブジェクトは、その nib がロードされたときにインスタンス化され、オブジェクトが作成された後、関連するすべてのオブジェクトに送信される前に、できるだけ直後に各アウトレットに割り当てられます。

つまり、nib の読み込みは、次のすべてをこの順序で実行します。

  1. nib に保存されているすべてのオブジェクトを作成または再作成します。(これには、ファイルの所有者、ファーストレスポンダ、およびその他の外部および架空のオブジェクトは含まれません。)
  2. ペン先に接続されているすべてのコンセント プロパティを、ペン先が接続されているのと同じペン先のオブジェクトに設定します。(例: ビュー コントローラのviewトップレベル ビューへのアウトレット。)
  3. nib のオブジェクトに送信awakeFromNibし、(Cocoa では) ファイルの所有者 (ウィンドウ コントローラなど) にも送信します。

あなたの質問は#2によって答えられます。

詳細については、リソース プログラミング ガイドを参照してください。詳細は、Cocoa と Cocoa Touch の間で微妙に異なります。特に、どのオブジェクトがawakeFromNibメッセージを送信され、どのオブジェクトが送信されないかに関してです。

いつインスタンス化されますか?私applicationDidFinishLoadingが呼び出された後でも、それはまだ「生きていない」またはアーカイブされていません。

テキストビューではありませんか?

おそらくそうで、コンセントを接続していないだけです。ニブでこれを確認してください。

別の可能性: アプリ デリゲートが作成された場所ではなく、別の nib でテキスト ビューを作成し (ペン先でアプリ デリゲートを作成した場合でも)、ビューを右側のアウトレットに接続していませんでした。物体。おそらく、テキスト ビューの nib に 2 つ目のアプリ デリゲートを作成しました。このアプリ デリゲートは、実際にはアプリのデリゲートではありません。そのため、実際のアプリ デリゲートにはテキスト ビューが表示されません。テキスト ビューは、本物の McCoy ではなく、なりすましに与えられたものです。

于 2013-04-21T20:14:56.063 に答える