EXC_BAD_ACCESS问题

时间:2011-01-15 15:06:10

标签: iphone

我将员工记录显示为屏幕中的行 我希望选择删除这些并在单击按钮时显示一组新记录

我的代码的结构/组织如下: 在我的控制器.h

NSMutableArray *employeeScrollViewArray;
IBOutlet UIScrollView *employeeScrollViewItems;
  • 这里我有一个UIScrollView - employeeScrollViewItems - 用UI上显示的行填充

  • 我还将这些行存储在一个数组中 - employeeScrollViewArray

MyController.m文件中对象的初始化和释放如下所示: 在方法

- (void)viewDidLoad {
employeeScrollViewArray=[[NSMutableArray alloc]init];

我在方法中发布了这个可变数组:

- (void)dealloc {
[employeeScrollViewArray release];

当视图加载时,我使用方法中的用户定义类的对象填充此数组: EmployeeDetail.m文件

EmployeeDetail *empDetail=[[EmployeeDetail alloc]init];
empDetail.delegate=self;
 [[NSBundle mainBundle] loadNibNamed:@"EmployeeDetail" owner:empDetail options:nil];
[self.employeeScrollViewItems addSubview:empDetail.view]; 
[employeeScrollViewArray addObject:empDetail];

“H”文件的详细信息是EmployeeDetail.h:

@interface EmployeeDetail : UIViewController


UIView *view;

这是填充了数据并显示在屏幕上的“视图”

我现在想清理/删除这些对象 所以我尝试了这样的事情:(然后导致异常)

int yyy = [employeeScrollViewArray count];
 for(int xxx=yyy-1;xxx>=0;xxx--){
    if ([[[employeeScrollViewItems subviews]objectAtIndex:xxx ]isKindOfClass:[UIView class]]) {
     [[[employeeScrollViewItems subviews ]objectAtIndex:xxx] removeFromSuperview];
    }
    [employeeScrollViewArray removeObjectAtIndex:xxx];
   }//for

这是我能够删除这些对象的唯一方法 如果我尝试单独删除它,我会收到此错误

然而,即使我删除了项目和代码传递 - 它仍然会抛出此错误 如果我删除此代码然后工作 - 但我不能删除这些对象

请帮忙!

1 个答案:

答案 0 :(得分:0)

我不知道错误的来源,但我有一些一般的建议:

将对象添加到数组后,应释放该对象。

[employeeScrollViewArray addObject:empDetail];
[empDetail release];

数组的条目将由数组本身保留。在清理方法(dealloc)中,现在只需释放数组:[employeeScrollViewArray release]。这也将释放所有包含的对象。

大多数情况下,没有必要清理视图层次结构。但是,如果您要删除employeeScrollViewItems的所有子视图,我会这样做:

for (UIView* subview in [employeeScrollViewItems subviews]) {
    [subview removeFromSuperview];
}