从表视图中删除特定行

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,它将为您处理从表和数据中添加和删除项目的所有复杂性。

【讨论】:

以上是关于从表视图中删除特定行的主要内容,如果未能解决你的问题,请参考以下文章

从表视图中删除行

从表视图中删除一行

从表视图中删除行 | NSUserDefaults + NSKeyedArchiver

从表视图中删除行时出现异常。 iOS 目标-C

从表视图中删除行并从 sqlite 数据库中删除记录

从表视图中删除数据会使应用程序崩溃