0

これは Mac アプリケーション用で、「setText」は iOS 用です。

私は通常、すべてのコードを AppDelegate クラスに詰め込みますが、これを変更しようとしています。これが、非常に基本的なものに問題がある理由だと思います。

Calculate という新しい NSObject クラスを作成し、Label と TextField を作成しました。Label を「summaryLabel」というアウトレットとして Calculate クラスに接続しました。

実装クラスでは、ラベルを次のように設定します。

[summaryLabel setStringValue:@"TEST"];

何も起こりません!

理由はわかりませんが、先ほど言ったように、さまざまなクラスを試しているので、何かが正しく結合されていないと確信しています。誰にもアイデアはありますか?

よろしくお願いします。

4

1 に答える 1

1

クラスのインスタンスが 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) CalculateNIB 内のオブジェクトに固執します。そのため、コード内で割り当てた部分を削除して、新しい部分を初期化してください。代わりに、NIB がロードされたときに作成された既存のものを参照してください。その参照が必要です。したがって、アプリのデリゲートにアウトレットを作成して、それを指し、NIB に接続します。

Calculateオプション 2)コードで作成したオブジェクトに固執する。したがって、NIB から 1 つを削除します。コードで作成したオブジェクトは、NIB からのものではないため、ラベルへの接続がありません。したがって、コードで作成したのと同じように、コードでラベルへの接続を設定する必要があります。ラベルへの参照が必要です。アプリのデリゲートにアウトレットを追加して、それをラベルに接続できます。次に、アプリのデリゲートは、ラベルについて作成したことをオブジェクトcalculateObject.summaryLabel = summaryLabel;に伝えることができます。Calculate

于 2012-05-09T17:57:59.707 に答える