• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:IBのオブジェクトにXcodeからコードでアクセスするにはどうすればよ)

IBのオブジェクトにXcodeからコードでアクセスする方法

このQ&Aのポイント
  • IBのオブジェクトにXcodeからコードでアクセスする方法を教えてください。
  • InterfaceBuilder上で配置したビューやウィンドウなどのコード上で定義されていないオブジェクトにコードでアクセスする方法が知りたいです。
  • InterfaceBuilderでウィンドウのアイコンから別のインスタンスにデリゲートを接続する方法ではなく、コードのみで接続する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.2

> Xcodeのバージョンは3.2.2、OSは10.6です。 了解しました。 ただし今回は、バージョンは関係なく、じっさいのコードを見なければ、回答できない内容でした。 Interface Builderで生成するインスタンス(AppControllerのインスタンス)は、初期化メソッド「init~」で、初期化処理を行うと、うまくいかないことが、よくあります。 今回の件でいうなら、メソッド「init」が実行される時点で、まだウインドウ「myWin」が生成されていないかもしれないからです。myWinが存在しない段階で、myWinのDelegateを指定することはできません。 Interface BuilderのNib(xib)からインスタンスがすべて生成されたことが保証されてから、初期化処理をするには、NSObjectのプロトコル「NSNibAwaking Protocol」にある、メソッド「awakeFromNib」に記述します。 - (void)awakeFromNib { [myWin setDelegate:self]; } としてみてください。

hk-sulo
質問者

お礼

早速ありがとうございます。 試してみたところ、今度はばっちりできました! それで、もう一つ疑問なのですが、IB上にあるオブジェクトにコードで定義したオブジェクトを接続するには、必ずアウトレットやバインドなどのIBでの接続操作が必要になるのでしょうか。 別の言語なのでまったく概念が違うかもしれませんが、 actionscript2.0などでは、 ステージ上に配置したインスタンスを操作したい場合、 そのインスタンスの名前をコードに記述して直接アクセスします。 こうしたことはXcodeではできない、と考えてよいでしょうか。 始めたばかりでまだわからないことが多く。。 的を外した質問かもしれませんが、 教えていただけると助かります。 よろしくお願いします!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.3

> それで、もう一つ疑問なのですが、IB上にあるオブジェクトにコードで定義したオブジェクトを接続するには、必ずアウトレットやバインドなどのIBでの接続操作が必要になるのでしょうか。 できないことはないと思いますが、それをしなければならない局面というものを、どうしてもイメージすることができません。 インスタンスを、動的に操作するのなら、Interface Builderでなく、コードでインスタンスを生成するのが、ふつうです。 > 始めたばかりでまだわからないことが多く。。 > 的を外した質問かもしれませんが、 おそらくそのとおりだと思いますが、これもまた、あなたがなさりたいことを、ソースコードを見て判断しないと、なんともいいようがありません。 それと、Flashでオーサリングすることと、Cocoaプログラミングすることを、同列に並べないほうがいいでしょうね。冷凍食品を、電子レンジでチンすることと、一流料理店のシェフが、いちから調理することを、同列に並べるのと、同じことですからね。

hk-sulo
質問者

お礼

お返事、ありがとうございます。 >インスタンスを、動的に操作するのなら、Interface Builderでなく、コードでインスタンスを生成するのが、ふつうです。 まだまだそこまで到達していないので、 これから勉強したいと思います。 >それと、Flashでオーサリングすることと、Cocoaプログラミングすることを、同列に並べないほうがいいでしょうね。 そうですよね。 まだイマイチCocoaの感覚がわからず、変な例を挙げてしまいました。 すみません。。 初歩的な質問に丁寧にお答え頂き、ありがとうございました!

すると、全ての回答が全文表示されます。
  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.1

Xcodeのバージョンを教えてください。 Xcodeは、ひんぱんにインターフェイスを変更しているので、バージョンが0.1違っただけでも、説明が通用しないケースが、多々あります。 基本は、ヘッダファイルの「@interface」内に、「IBOutlet」と宣言して、インスタンスを記述します。

hk-sulo
質問者

補足

大切な情報が抜けておりました。すみません。 Xcodeのバージョンは3.2.2、OSは10.6です。 回答頂いた内容、「なるほど」と思って早速試してみたのですが、うまくデリゲートできません。。 おそらくコードが間違っていると思うのですが、アドバイスいただけますでしょうか。 以下に記します。 (Xcodeで新しいクラス(名前はAppController)を作り、それに記述しています) <ヘッダーファイル> #import <Cocoa/Cocoa.h> @interface AppController : NSObject <NSWindowDelegate> { IBOutlet NSWindow *myWin; } @end <実装ファイル> #import "AppController.h" @implementation AppController -(id)init { [super init]; [myWin setDelegate:self]; return self; } -(NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize { NSSize mySize = frameSize; NSLog(@"success"); mySize.width = mySize.height * 2; return mySize; } @end アウトレットmyWinは、IBでメインのウィンドウに接続しています。 どこがまずいのか、アドバイスお願いします!

すると、全ての回答が全文表示されます。