2011-11-10 13 views
0

ボタンをクリックしてビューを動的にロードしたい。UIViewを動的に読み込んで解放する

は、ビューが 'MYVIEW'

私は

IBOutlet UIView *myView; 

として、それを宣言して作られたmyView.xibからインターフェースビルダー経由で接続されているとしましょう。

私はプロパティを設定すると、このビュー

のために合成していなかったが、今私が何をしたいボタン

のクリックで、このビューにメモリを割り当てることがあるので、私は私のViewControllerのボタンを押す方法で試してみました

(void) buttonPressed1{ 
    myView = myView = [[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] objectAtIndex:0]; 
    myView.frame = CGRectMake(30, 40, 200, 200); 
    [self.view addSubview:myView]; 
} 

正常に読み込まれました。 :)

今私は、他のボタンのクリックで、このビューにアクセスしたい...

ので、私はこれを実行するときに---それはOK

を作品

-(IBAction) buttonPressed2:(id)sender 
{ 
    myView.alpha = 0; 
    [myView release]; 
} 

を書きました

on buttonPressed他のクリックでそのビューを追加すると、そのビューがフェードアウトしてそのビューが解放されます。

しかし、私はもう一度ボタン2をクリックの上、それは

modifying layer that is being finalized - 0x6807b60 

を言うのビューを追加するためのボタンをクリックすると、今、それがクラッシュ...

基本的に私の要件は、メモリにのみ、そのビューを維持することですそれが使用された後、それを使用する場合、それは割り当てを解除する必要があります。..

ので、アプローチの上にある良いものであるか、またはそれを行うには、他の方法があります...

AN dそのエラーは何を意味しますか????

!より多くのクエリは、ここでは上記の場合

です.... MYVIEWへ

メモリは????ボタンをクリックするだけで、実行時に割り当てられている....

私は、この経由をテストしていたときのようXcodeで楽器、ボタンのクリックにグラフで示す全く割り当てがありません...

そう...

私を助けてください..で

感謝を助けてくださいdvance

答えて

1

ビューを解放するとき:[myView release];スーパービューからは削除されません。さらに、自動リリースされたオブジェクトとして作成されたときにリリースするべきではありません。

ソリューションは、次のようになります。

(void) buttonPressed1{ 
    if (myView) 
    { 
     [myView removeFromSuperview]; 
    } 
    myView = [[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] objectAtIndex:0]; 
    myView.frame = CGRectMake(30, 40, 200, 200); 
    [self.view addSubview:myView]; 
} 
-(IBAction) buttonPressed2:(id)sender 
{ 
    myView.alpha = 0; 
    //[myView release]; 
} 
+0

私は推測する、のuたいが、このメソッドからロードされ、そのビューがオブジェクトを自動解放されると言います? –

+0

私はXcodeで、機器を経由して、これをテストしていたときのよう ....上記の場合ここで が.... MYVIEWへ メモリは????ボタンをクリックするだけで、実行時に割り当てられていることを知りたいです、ボタンクリックでグラフに表示される割り当てはありません。 –

+0

「このメソッドからロードされたビューはオートレリースされたオブジェクトですか?」回答:「はい」 – Nekto

関連する問題