从表视图中删除特定行

时间:2010-08-03 19:06:13

标签: iphone objective-c core-data

在我的应用中,我想从表格视图中删除特定行。表视图内容来自数据库,从数据库获取数据后,我推送到数组。然后我颠倒了一个数组,在我在表视图中显示内容之后。我的问题是,当我试图代表第二行删除第二行表视图时,它删除第一行表视图。这里我放入了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 个答案:

答案 0 :(得分:1)

这是你的问题:

[savedArray removeObjectAtIndex:indexPath.row];

[saveTable deleteRowsAtIndexPaths:[NSArray arrayWithObject:[savedArray objectAtIndex:val]] withRowAnimation:UITableViewRowAnimationFade];

在从表中删除行之前删除数组中的行,但是使用数组本身来告诉您要删除表的哪一行。无论指数val之前有什么:

[savedArray removeObjectAtIndex:indexPath.row];

...将通过更改savedArray本身而变为无效。

这段代码都是不必要的复杂。您不需要手动反转数组,而应该为获取请求提供排序描述符,以便它返回一个已经按照您目前所需的顺序排序的数组。更好的是,您应该使用NSFetchedResultsController来处理从表中添加和删除项目以及为您提供数据的所有复杂性。