0

私のAppDelegate方法ではapplicationDidFinishLaunching:

// Initialize here
NSLog(@"Application finished launching...");

MyMain* mainAccess;                    // To send messages to SAAMain
mainAccess = [[Main alloc] init];

NSLog(@"Setting title...");
version = @"v1.0";
[mainAccess setTitleVersion:version];   // Set Title with proper version

ご覧のとおり、メッセージを送信するために MyMain クラスのインスタンスを作成しました (すべての重要な「メイン」メソッドが配置されている場所)。この場合、タイトルを設定しようとしています。

私の MyMain クラスにはメソッドがあり、パラメーター (バージョン) として asetTitleVersionを受け取ります。NSString

NSLog(@"setTitleVersion called");

NSString *title = [NSString stringWithFormat:(@"Version: %@", version)];
//[_mainWindow setTitle:([NSString stringWithFormat:title])];
[_mainWindow setTitle:@"Test"];

NSString *mainWindowTitle = _mainWindow.title;
NSString *test2 = _mainWindow.value;
NSLog(@"_mainWindow.title: %@\n_mainWindow.value: %@", mainWindowTitle, test2);

この MyMain クラスに接続されたメイン ウィンドウのアウトレットがあります (_mainWindow で確認できます)。

NSLogs自分でデバッグするためにいくつか追加しました。値とタイトルの両方が として返されnullます。

私は何を間違っていますか?コンソール出力でわかるように、メソッドが呼び出されています。まるで_mainWindowコンセントが正常に機能していないかのようです。

4

2 に答える 2

1

あなたの子供がアイスクリームのボウルを持っていて、その上にチェリーが欲しいとしましょう。あなたは冷凍庫に行き、アイスクリームのカートンを取り出します。キャビネットからボウルを取り出します。ボウルにアイスクリームを入れます。これで、アイスクリームのボウルができました。冷蔵庫からさくらんぼを取り出して、さくらんぼをのせます。次に、アイスクリームのボウル(チェリーを上に載せたもの)を捨てます。あなたの子供のアイスクリームのボウルにはまだチェリーが上にないので、今あなたは混乱しています!何を間違えましたか?

このシナリオは、問題のメタファーです。の既存のインスタンスにsetTitleVersion:メッセージを送信する必要があります。のまったく新しいインスタンスを作成し、それにメッセージを送信してから、その新しいインスタンスを破棄することはできません。MyMainMyMain

rdelmarの回答に対するあなたのコメントは、の既存のインスタンスがMyMainメインのペン先にあり、そこへの出口があることを示しています。これは、にタイプのアウトレットがあり、そのアウトレットがペン先のオブジェクトに接続されていることを意味すると思いMyMainます。その場合、アウトレットのオブジェクトにメッセージを送信する必要があります。アウトレットに名前が付けられている場合は、次のようにします。MyAppDelegateMyMainsetTitleVersion:mainObject

[self.mainObject setTitleVersion:version];

まだアウトレットを作成していない場合はMyAppDelegate、Xcodeのアシスタントエディタを使用して、アウトレットを作成し、ワンステップで接続できます。アシスタントエディタを開き、が表示されていることを確認しMyAppDelegate.hます。次に、次のようMyMainに、ペン先のオブジェクトから自分のオブジェクトにcontrolキーを押しながらドラッグします。@interface MyAppDelegate

新しいコンセントを作成して接続する

ですでにアウトレットが宣言されている場合MyAppDelegateは、nibエディターで接続できます。コントロールMy App Delegateキーを押しながら、ペン先のオブジェクトリストでプレースホルダーをクリックします。次に、アウトレットのポップアップで、次のMyMainようにアウトレットの円からオブジェクトのプレースホルダーにドラッグします。

既存のコンセントを接続する

于 2013-02-13T04:45:51.627 に答える
0

メインクラスに接続するためのIBOutletがあるとおっしゃっていますが、何が何であるかについて少し混乱しています。まず、アウトレットをクラスに接続するのではなく、オブジェクトに接続します。あなたの質問から判断するのは難しいですが、問題は、コードでMain、mainAccessの1つのインスタンスを作成していることだと思いますが、それはIBにアウトレットがあるインスタンスではありません。

于 2013-02-13T04:41:17.847 に答える