从表视图中逻辑删除对象时出现问题。想法是如果不应该显示项目,则将标记设置为“已删除”等项目。加载数据谓词不应加载此类行。
包含谓词和创建NSFetchedResultController的代码:
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Photo"];
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"section" ascending:YES],
[NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES]];
request.predicate = [NSPredicate predicateWithFormat:@"tag = %@ and deleted == %@", self.tag, @(0)];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:self.tag.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
在滑动时删除。这是滑动的动作:
- (IBAction)deletePhoto:(UISwipeGestureRecognizer *)sender {
CGPoint location = [sender locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
if (indexPath) {
Photo *photo = [self.fetchedResultsController objectAtIndexPath:indexPath];
[self.tag.managedObjectContext performBlock:^{
photo.deleted = @(1); //This must trigger data change and view must be redrawn. But it's not happending for some reason.
}];
}
}
此处的问题是只有在应用程序重新启动后才会删除行。由于某种原因,FetchedResultsController不会从数据中删除更改的值,而表视图仍然显示该行。
我尝试从表视图中显式删除该项,但在第0部分中错误的项目数得到了异常(这就是为什么我假设该行仍在获取结果中)。对[self.tableView reloadData]或[self performFetch]的显式调用不会重新加载数据和项目。
我几乎没有想法如何重新加载数据。
提前致谢。
答案 0 :(得分:0)
我不应该在DB“已删除”中命名一个字段。重命名它,现在app工作正常。