如何从表中删除单元格

我使用asihttprequest来下载文件,但是当下载失败时,与表中文件相关联的单元格不会从tableview中删除。

当我刷卡删除,我有这个错误:

*终止应用程序由于未捕获的exception'NSRangeException',原因:'* – [NSMutableArray objectAtIndex:]:索引0超出空数组的边界'

我怎样才能删除单元格?

MANAGER.h

NSMutableArray *contentArray; 

MANAGER.m

 - (id)initWithStyle:(UITableViewStyle)style { if (self == [super initWithStyle:style]) { self.navigationController.navigationBar.tintColor = [UIColor blackColor]; self.navigationItem.rightBarButtonItem = self.editButtonItem; contentArray = [[NSMutableArray alloc] init]; progArray = [[NSMutableArray alloc] init]; self.view.backgroundColor = [UIColor clearColor]; //saveTo = [[NSUserDefaults standardUserDefaults] stringForKey:@"save_to"]; AppDelegate_iPhone* delegate = (AppDelegate_iPhone *)[[UIApplication sharedApplication] delegate]; if([delegate saveTo] != nil) { saveTo = [delegate saveTo]; } if(saveTo == nil) { saveTo = @"/"; } allFiles = [[NSMutableArray alloc] init]; NSDirectoryEnumerator *dirEnum = [ [ NSFileManager defaultManager ] enumeratorAtPath:saveTo]; NSString *file; while ((file = [ dirEnum nextObject ])) { if(file != nil) { if([file rangeOfString:@".mp4" options: NSCaseInsensitiveSearch].length > 0 || [file rangeOfString:@".mov" options: NSCaseInsensitiveSearch].length > 0 || [file rangeOfString:@".m4v" options: NSCaseInsensitiveSearch].length > 0 || [file rangeOfString:@".pdf" options: NSCaseInsensitiveSearch].length > 0 ) { [ allFiles addObject: file]; } } } } return self; } // Override to support editing the table view. - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if(indexPath.section == 0) { if (editingStyle == UITableViewCellEditingStyleDelete) { Selected = indexPath.row; //Remove The Temporary File NSFileManager *fileManager = [NSFileManager defaultManager]; if([fileManager fileExistsAtPath:[(ASIHTTPRequest *)[contentArray objectAtIndex:indexPath.row] temporaryFileDownloadPath]]) { ...... - (void)requestFailed:(ASIHTTPRequest *)request { [contentArray removeObject:request]; [progArray removeObject:request]; [self reloadMyData]; [self.tableView reloadData]; } -(void)reloadMyData { allFiles = [[NSMutableArray alloc] init]; AppDelegate_iPhone* delegate = (AppDelegate_iPhone *)[[UIApplication sharedApplication] delegate]; if([delegate saveTo] != nil) { saveTo = [delegate saveTo]; } NSDirectoryEnumerator *dirEnum = [ [ NSFileManager defaultManager ] enumeratorAtPath:saveTo]; NSString *file; while ((file = [ dirEnum nextObject ])) { if(file != nil) { //if([file rangeOfString:@".mp4" options: NSCaseInsensitiveSearch].length > 0 || [file rangeOfString:@".mov" options: NSCaseInsensitiveSearch].length > 0 || [file rangeOfString:@".mp3" options: NSCaseInsensitiveSearch].length > 0 ) if([file rangeOfString:@".mp4" options: NSCaseInsensitiveSearch].length > 0 || [file rangeOfString:@".mov" options: NSCaseInsensitiveSearch].length > 0 || [file rangeOfString:@".m4v" options: NSCaseInsensitiveSearch].length > 0 || [file rangeOfString:@".pdf" options: NSCaseInsensitiveSearch].length > 0) { [ allFiles addObject: file]; } } } } #pragma mark - #pragma mark Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView { // Return the number of sections. return 2; } - (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. if(section == 0) { return [progArray count]; } else { return [allFiles count]; } } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *CellIdentifier = [NSString stringWithFormat:@"CellIdentifier_%i_%i",indexPath.section,indexPath.row]; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; cell = nil; if(indexPath.section == 0) { if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; cell.accessoryType = UITableViewCellAccessoryNone; cell.selectionStyle = UITableViewCellSelectionStyleNone; } [cell addSubview:[progArray objectAtIndex:indexPath.row]]; } else { if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } // cell.accessoryType = UITableViewCellAccessoryNone; cell.selectionStyle = UITableViewCellSelectionStyleBlue; cell.textLabel.text = [allFiles objectAtIndex:indexPath.row]; } return cell; } 

从tableView删除行时,需要在删除行的同时从数据源中删除该对象。 如果从数据源中删除一行,则需要在删除时更新表(-deleteRowsAtIndexPaths:withRowAnimation :)以维护tableView和数据源之间的关系。