从表视图中删除特定行
Posted
技术标签:
【中文标题】从表视图中删除特定行【英文标题】:Delete particular row from table view 【发布时间】:2010-08-03 19:06:12 【问题描述】:在我的应用程序中,我想从表格视图中删除特定行。表视图内容来自数据库,从数据库获取数据后,我推送到数组。然后我反转了一个数组,在我在表格视图中显示内容之后。我的问题是,当我试图代表第二行删除表视图的第二行时,它会删除表视图的第一行。这里我把commitEditingStyle方法里面的代码,
if (editingStyle == UITableViewCellEditingStyleDelete)
[savedArray removeObjectAtIndex:indexPath.row];
[saveTable deleteRowsAtIndexPaths:[NSArray arrayWithObject:[savedArray objectAtIndex:val]] withRowAnimation:UITableViewRowAnimationFade];
newsObj = [(BlackSheepAppDelegate *)[[UIApplication sharedApplication] delegate] nsManagedObjectContext];
NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription * entity = [NSEntityDescription entityForName:@"ArticalDetails" inManagedObjectContext:self.newsObj];
[fetchRequest setEntity:entity];
NSError *error;
NSArray *items = [self.newsObj executeFetchRequest:fetchRequest error:&error];
[newsObj deleteObject:[items objectAtIndex:indexPath.row]];
NSLog(@"Deleted content position %d", indexPath.row);
if ([newsObj hasChanges] && ![newsObj save:&error])
NSLog(@"%@", [error description]);
[saveTable reloadData];
用于反转数组,
for(int i = 0; i < [savedArray count] / 2; i++)
int j = [savedArray count] - i - 1;
id temp = [[savedArray objectAtIndex:i] retain];
[savedArray replaceObjectAtIndex:i withObject:[savedArray objectAtIndex:j]];
[savedArray replaceObjectAtIndex:j withObject:temp];
[temp release];
请帮帮我!
【问题讨论】:
这种行为是否一致?它是否总是删除您要删除的行后面的行?如果是这样,只需将 1 添加到 indexPath.row。 @gnuchu 我已经尝试过但没有解决我的问题,因为当我尝试删除最后一行时,应用程序退出并且它还删除了点击的表行的下一行。 【参考方案1】:这是你的问题:
[savedArray removeObjectAtIndex:indexPath.row];
[saveTable deleteRowsAtIndexPaths:[NSArray arrayWithObject:[savedArray objectAtIndex:val]] withRowAnimation:UITableViewRowAnimationFade];
在从表中删除行之前,您从数组中删除了该行,但是您使用数组本身来告诉您要删除表的哪一行。无论val
之前有什么索引:
[savedArray removeObjectAtIndex:indexPath.row];
... 将通过更改 savedArray
本身变得无效。
这段代码太复杂了。您不需要手动反转数组,而是应该为 fetch 请求提供一个排序描述符,以便它返回一个已经按照您目前需要的任何顺序排序的数组。更好的是,您应该使用NSFetchedResultsController
,它将为您处理从表和数据中添加和删除项目的所有复杂性。
【讨论】:
以上是关于从表视图中删除特定行的主要内容,如果未能解决你的问题,请参考以下文章