在我的应用中,我想从表格视图中删除特定行。表视图内容来自数据库,从数据库获取数据后,我推送到数组。然后我颠倒了一个数组,在我在表视图中显示内容之后。我的问题是,当我试图代表第二行删除第二行表视图时,它删除第一行表视图。这里我放入了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];
}
请帮帮我!
答案 0 :(得分:1)
这是你的问题:
[savedArray removeObjectAtIndex:indexPath.row];
[saveTable deleteRowsAtIndexPaths:[NSArray arrayWithObject:[savedArray objectAtIndex:val]] withRowAnimation:UITableViewRowAnimationFade];
在从表中删除行之前删除数组中的行,但是使用数组本身来告诉您要删除表的哪一行。无论指数val
之前有什么:
[savedArray removeObjectAtIndex:indexPath.row];
...将通过更改savedArray
本身而变为无效。
这段代码都是不必要的复杂。您不需要手动反转数组,而应该为获取请求提供排序描述符,以便它返回一个已经按照您目前所需的顺序排序的数组。更好的是,您应该使用NSFetchedResultsController
来处理从表中添加和删除项目以及为您提供数据的所有复杂性。