2011-05-05 110 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