我将员工记录显示为屏幕中的行 我希望选择删除这些并在单击按钮时显示一组新记录
我的代码的结构/组织如下: 在我的控制器.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
这是我能够删除这些对象的唯一方法 如果我尝试单独删除它,我会收到此错误
然而,即使我删除了项目和代码传递 - 它仍然会抛出此错误 如果我删除此代码然后工作 - 但我不能删除这些对象
请帮忙!
答案 0 :(得分:0)
我不知道错误的来源,但我有一些一般的建议:
将对象添加到数组后,应释放该对象。
[employeeScrollViewArray addObject:empDetail];
[empDetail release];
数组的条目将由数组本身保留。在清理方法(dealloc
)中,现在只需释放数组:[employeeScrollViewArray release]
。这也将释放所有包含的对象。
大多数情况下,没有必要清理视图层次结构。但是,如果您要删除employeeScrollViewItems
的所有子视图,我会这样做:
for (UIView* subview in [employeeScrollViewItems subviews]) {
[subview removeFromSuperview];
}