クラスのインスタンスが 2 つあると思いますCalculate
。NIB で 1 つをインスタンス化している可能性があります。これは、コンセントを接続した方法です。次に、 のようなものを使用してコード内で別のものをインスタンス化する場合があります[[Calculate alloc] init]
。これは別のオブジェクトです。NIB のものではないため、コンセントはどこにも接続されていません。
1 つのインスタンスが必要です。本当に NIB からのものに接続する必要がある場合は、通常、NIB にある必要があります。(NIB には、ファイルの所有者など、NIB でインスタンス化されていないいくつかのプロキシ オブジェクトを含めることができますが、それらをモノに接続することができ、NIB が読み込まれると、それらの接続は実際のオブジェクトに接続されます。)
NIB 内のインスタンスを参照する方法も必要な場合は、別のもの (おそらくアプリ デリゲート) からそのインスタンスへのアウトレットが必要です。
アップデート:
わかった。したがって、NIB に Calculate オブジェクトがあります。それは本当の「フリーズドライ」オブジェクトです。NIB がロードされると、そのオブジェクトが再構成され、その接続がセットアップされます。
また、個別に、次のCalculate
ようなことを行ってコード内のオブジェクトをインスタンス化します[[Calculate alloc] init]
よね? それは別のオブジェクトを作成しています。これは NIB のものではなく、NIB で設定した接続は影響しません。したがって、そのsummaryLabel
インスタンス変数はnil
.
オブジェクトをインスタンス化する 1 つの方法を選択し、それに固執する必要があります。
オプション 1) Calculate
NIB 内のオブジェクトに固執します。そのため、コード内で割り当てた部分を削除して、新しい部分を初期化してください。代わりに、NIB がロードされたときに作成された既存のものを参照してください。その参照が必要です。したがって、アプリのデリゲートにアウトレットを作成して、それを指し、NIB に接続します。
Calculate
オプション 2)コードで作成したオブジェクトに固執する。したがって、NIB から 1 つを削除します。コードで作成したオブジェクトは、NIB からのものではないため、ラベルへの接続がありません。したがって、コードで作成したのと同じように、コードでラベルへの接続を設定する必要があります。ラベルへの参照が必要です。アプリのデリゲートにアウトレットを追加して、それをラベルに接続できます。次に、アプリのデリゲートは、ラベルについて作成したことをオブジェクトcalculateObject.summaryLabel = summaryLabel;
に伝えることができます。Calculate