奇怪的索引越界异常

问题描述:

我想动画的视图内删除一个scrollView。 scrollView的子视图正在被一组对象填充。每个对象都有一个代表它的视图。有时当我删除时,我得到一个indexOutOfBounds异常。这是我的删除的代码:在这一点上[self.myObjects removeObjectAtIndex:viewToDelete.tag];奇怪的索引越界异常

为删除从阵列的一个对象时发生一旦

-(void)deleteView:(UIView *)viewToDelete{ 
    [self.myObjects removeObjectAtIndex:viewToDelete.tag]; 
    [UIView animateWithDuration:0.5 animations:^{ 
     viewToDelete.alpha = 0.0; 
     for (NSInteger index = viewToDelete.tag+1; index<self.myViews.count; index++){ 
      UIView *view = [self.myViews objectAtIndex:index]; 
      view.center = CGPointMake(view.center.x,view.center.y-viewToDelete.frame.size.height); 
     } 
    }]; completion:^(BOOL finished) { 
     [view removeFromSuperview]; 
    }]; 

    [self.myViews removeObjectAtIndex:viewToDelete.tag]; 
    for (NSInteger index=0; index<self.myVies.count; index++){ 
     UIView *view = [self.myViews objectAtIndex:index]; 
     view.tag = index; 
    } 

} 
+0

认沽[self.myObjects removeObjectAtIndex:viewToDelete.tag]。 after [self.myViews removeObjectAtIndex:viewToDelete.tag];并试一试.. – 2013-03-06 12:51:48

+1

这是“超出界限”,而不是“超出反弹”...... – 2013-03-06 12:52:40

+5

索引出现反弹异常。应该把它扔得更好.. – christopher 2013-03-06 12:53:25

的问题是与动画块

你应该知道,动画块被异步处理,所以你的代码的最后和平可能会在动画制作过程中被调用,使一个烂摊子你迭代内循环动画块。你应该将

[self.myViews removeObjectAtIndex:viewToDelete.tag]; 
for (NSInteger index=0; index<self.myVies.count; index++){ 
    UIView *view = [self.myViews objectAtIndex:index]; 
    view.tag = index; 
} 

来完成块

错误

,项的总数将减少。所以你不能访问该索引处的对象。

你应该真的映射这两个数组self.myObjects和self.myViews。

+0

它看起来像他必须阵列,一个拿着物体,一个拿着视图。 – 2013-03-06 13:00:25

+0

是的,我知道他写过这个[view removeFromSuperview];在完成块。可能视图不会被删除并再次评估。而对象从数组中移出 – 2013-03-06 13:06:46