2011-02-06 42 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

告訴我們MyView的財產 – 2011-02-06 17:53:16

+1

的聲明是什麼調用堆棧看,當你`EXC_BAD_ACCESS`什麼樣的?你可以在GDB中看到它,它會告訴你誰試圖在其銷燬後訪問一個對象。 – 2011-02-06 17:54:13

+0

在第一個塊中接收到一個'EXC_BAD_ACCES`不應該感到驚訝:您正在向`removeFromPoint:`中的未初始化對象發送消息。你的圖像變量只包含一些垃圾,你不能發送任何東西!在你的第二部分代碼中,我想你可能犯了一個錯字:`self.MyView`應該是`self.myView`。 – v1Axvw 2011-02-06 20:00:09

回答

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

如果您要添加只有一個視圖。然後我會把它保存在保留的財產,我會添加/刪除它這樣的活動:

@property (nonatomic,retain) UIImageView* marker; 

@interface 
@syntesize marker; 

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

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

移除圖像視圖的第一個例子是錯誤的。 第二個是什麼POINT_TAG等於? 嘗試使用標籤大於9 嘗試調試的UIImageView *image = (UIImageView *)[self.MyView viewWithTag:POINT_TAG]; 回報。