2011-02-06 11 views
1

からUIImageViewを削除し、私はこのような画面にUIImageViewを置く:ユーザが画面に触れたときに私のアプリケーションではそのスーパービュー

- (void) drawPoint:(CGPoint) toLocation { 
    UIImageView *image = [[UIImageView alloc] initWithFrame:CGRectMake(toLocation.x, toLocation.y, SIZE_X, SIZE_Y)]; 
    image.tag = 1; 
    [image setImage:[UIImage imageNamed:@"point.png"]]; 
    [self.myView addSubview:image]; 
    [image release]; 
} 

をここでMyViewUIViewです。

ユーザーがタッチしたら、UIImageViewを削除します。私はこれを試してみました:

- (void) removeFromPoint:(CGPoint) location{ 
    UIImageView *image; 
    [[image viewWithTag:1] removeFromSuperview]; 
} 

または

- (void) removeFromPoint:(CGPoint) location{ 
    UIImageView *image = (UIImageView *)[self.MyView viewWithTag:1]; 
    [image removeFromSuperview]; 
} 

が、それらの両方がEXC_BAD_ACCESSで終わります。 これをどのように達成できますか?

ありがとうございました。

+0

あなたは 'EXC_BAD_ACCESS'を得るときMYVIEWプロパティ –

+1

の宣言はどのようなコールスタックがどのように見えるん私たちを見ますか?あなたはGDBでそれを見ることができ、破壊後に誰がオブジェクトにアクセスしようとしているのかを表示します。 –

+0

最初のブロックで 'EXC_BAD_ACCES'を受け取っても驚かないでください。' removeFromPoint: 'の初期化されていないオブジェクトにメッセージを送ります。あなたの画像変数には何も送ることができないゴミが入っています! 2番目のコードブロックでは、誤植をしている可能性があります: 'self.MyView'は' self.myView'でなければなりません。 – v1Axvw

答えて

1

あなたは試すタッチの下uimageを削除したい場合は、この:

UIView * imageView = [self.myView hitTest:location withEvent:nil]; 
if ([imageView isKindOfClass:[UIImageView class]] && imageView.tag == 1) { 
    [imageView removeFromSuperview]; 
} 

(私はそれをここに入力した注意してください、私がテストしていないそのコード)あなたをデバッグしたい場合

NSZombiesを有効にしてbad_accessを取得する理由を確認してください。 NSZombieEnabledの詳細についてはこちらをご確認ください。http://www.cocoadev.com/index.pl?NSZombieEnabled

ビューを1つだけ追加する場合は、それから私は保持プロパティに格納しますし、私は追加します/このようなイベントでそれを削除します。

@property (nonatomic,retain) UIImageView* marker; 

@interface 
@syntesize marker; 

-(void) onTouchDown { 
    [self.view addSubview:marker]; 
} 

-(void) onTouchUp { 
    [marker removeFromSuperview]; 
} 
+0

ユーザーが画面から指を離したときにUIImageViewを削除したいです。私のUIImageViewの位置は関係ありません。あなたが私に言ったことは基本的に正確に私が試みた方法です:UIImageView * image =(UIImageView *)[self.MyView viewWithTag:1]; [image removeFromSuperview] ;.そして、これは私のために働いていない。 – CristiC

+0

@parkyprg、Okだからself.myViewに何か問題があるはずです。あなたはその財産をどのように宣言したのか教えてください。 –

+0

ありがとうございます。あなたの2番目の助言が働いた。 – CristiC

1

イメージビューを削除する最初の例は間違っています。 2番目にPOINT_TAGは何ですか? 9より大きいタグを使用してください。 何をデバッグしようとしますかUIImageView *image = (UIImageView *)[self.MyView viewWithTag:POINT_TAG]; が返します。

+0

POINT_TAGは1です - 指定するのを忘れていました。私は自分の投稿を修正した。そしてUIImageViewを返すデバッグ。 – CristiC

+0

Piotr Czaplaが提案したとおり、NSZombieEnabled YESを試してみてください。それはあなたにデバッグの詳細を与えるでしょう。 –

関連する問題