2011-02-02 16 views
1

マップ要素を追加しようとしているゲームアプリケーション(ココアではなく、ココア)があります。私のアプリケーションウィンドウはmainWinという名前です。私は、私がIBで追加したmainWinのviewGameMapという名前のサブビューを持っています。私はroom.h/room.mというクラスを持っています。これは基本的に、部屋の幅と高さのためにアプリで生成された次元を取ります。Cocoa Objective-Cサブビューを追加する

私はこれを行うことができます。

room* thisRoom = [[room alloc] initWithFrame: NSMakeRect(441.0-roomWidth,520.0-roomLength, roomWidth * 10, roomLength * 10)]; 
[[mainWin contentView] addSubview:thisRoom]; 

しかし、私は本当にviewGameMapにこのサブビューを追加したい、私はサブビューをサブビューことができますか? IBでは、サブビューにはcontentViewがないので、どのように配置するのか分かりません。

関連する質問では、これらのルームビューは永久的ではないので、一度終了するとどのように破壊するのですか?

おかげ

答えて

1

まず、あなたがこの(@propertyディレクティブを使用して)のように、あなたの.hファイルでviewGameMapを宣言した場合:ただ、実際の宣言で

@property (nonatomic, retain) IBOutlet UIView *viewGameMap; 

かさえ、このような:

IBOutlet UIView *viewGameMap; 

これで、viewGameMapをIB内の適切なUIViewにバインドできるはずです。これにより、viewGameMapに直接アクセスできます。

第2に、ルームオブジェクト(n.b.、クラスルームは大会ごとに大文字にする必要があります)をインスタンス化するためにallocを使用しているため、あなたはそれを所有しています。しかし、-addSubview:を呼び出すと、[mainWin contentView] がthisRoomを所有します。 thisRoomは、[のMainWin contentView]から削除され

その後
room* thisRoom = [[room alloc] initWithFrame: NSMakeRect(441.0-roomWidth,520.0-roomLength, roomWidth * 10, roomLength * 10)]; 
[viewGameMap addSubview:thisRoom]; 
[thisRoom release]; 

、その参照カウントが(他のいくつかの参照を禁止する)だろうゼロに低下し、それが、最終的には、割当て解除されます:だから、あなたはこれを行うことができます。

関連する問題