2011-05-05 95 views
1

我正在使用CoreData + UITableView处理待办事项列表应用程序,我想隐藏用户标记为已完成的行。隐藏UITableViewCell的特定行

我当前的解决方案是在用户标记任务完成时调用deleteRowsAtIndexPaths,并从numberOfRowsInSection的函数中扣除删除的行。

-(void)markDone:(NSIndexPath *) _indexPath{ 
    [self.tableView beginUpdates]; 
    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:_indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    deletedCount = deletedCount + 1; 
    [self.tableView endUpdates];  
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; 

    if (deletedCount>0) { 
     return [sectionInfo numberOfObjects]-deletedCount; 
    } 

    return [sectionInfo numberOfObjects]; 
} 

这种方法虽然没有工作,但我确实需要一些代码在这里,有黑客。有没有办法调用NSFetchedResultsController didChangeObject改变特定字段的状态?

谢谢

+1

对我来说似乎是正确的,您是否考虑过使用两个列表来处理您的数据,一个是针对所有人的,一个是针对尚未标记为已完成的数据? – ThomasRS 2011-05-05 16:42:36

+0

宁愿单个列表。我不太确定如何在核心数据中使用两个列表。大声笑。 – TonyTakeshi 2011-05-05 17:32:25

回答

1

我认为有很多方法可以解决这个问题。我只是在你的管理对象添加一个字段,其中规定如果某行被隐藏”

删除将相应设置此字段。

你现在需要的是与相应的谓词过滤隐藏的NSFetchRequest 。行

我刚刚创建与核心数据支持一个简单的模板应用程序,我认为这是很容易实现:

我添加了一个隐藏的BOOL属性给出的entitiy,默认NO

然后,我添加此代码didSelectRowAtIndexPath方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSManagedObject *selectedObject = [[self fetchedResultsController] objectAtIndexPath:indexPath];  
    [selectedObject setValue:[NSNumber numberWithBool:YES] forKey:@"hidden"]; 
} 

- (NSFetchedResultsController *)fetchedResultsController {...我加入

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"hidden == NO"]; 
[fetchRequest setPredicate:predicate]; 

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 

这是它通过点击(只是为了本示例)以隐藏细胞他们。

+0

Thx回复。我可以再次查询数据,但我很想显示行淡入效果。这就是为什么我计算如何调用NSFetchResultController didChangeObject与NSFetchedResultsChangeDelete的行动。我们是否有办法通过改变行的字段来调用didChangeObject函数(例如设置done = 1)? – TonyTakeshi 2011-05-05 17:31:24

+0

更新我的答案,希望它有帮助。 – 2011-05-05 17:48:33

+0

谢谢尼克!现在我明白了。 – TonyTakeshi 2011-05-05 18:02:25