1

我正在使用拆分視圖控制器處理核心數據驅動的iPad應用程序。試想一下iPad Mail應用程序,你就會走上正軌。當我在根視圖控制器中選擇一條記錄時,細節顯示在DetailViewController中。核心數據:刪除記錄時自動選擇下一行表格

在Detail View上,我有一個刪除按鈕。點擊後,它會通知其核心數據上下文刪除當前對象。它正確執行刪除操作,並且該行從RootViewController中消失,就像它應該那樣。

如何讓RootViewController自動選擇被刪除的行後的行,以便隨後在詳細視圖中顯示詳細信息? (或者如果刪除的行是最後一行,自動選擇上一行?)

回答

0

好的。我想我明白了。這就是我所做的。 (如果你看到更好的方法,請加以注意。)

首先,我定義了一個新的NSInteger ivar,lastSelectedRow。

接着,我改變

case NSFetchedResultsChangeDelete: { 
     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
     break; 

case NSFetchedResultsChangeDelete: { 
     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
     lastSelectedRow = indexPath.row; 
     id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:0]; 
     if (lastSelectedRow == [sectionInfo numberOfObjects]) { 
      --lastSelectedRow; 
     } 
     break; 
    } 

然後,我改變

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller 
{ 
    [self.tableView endUpdates]; 
} 

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller 
{ 
    [self.tableView endUpdates]; 
    if (lastSelectedRow > -1) { 
     NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:lastSelectedRow inSection:0]; 
     [self.tableView selectRowAtIndexPath:newIndexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; 
     [self tableView:self.tableView didSelectRowAtIndexPath:newIndexPath]; 
     lastSelectedRow = -1; 
    } 
} 

UND瞧!!

作爲額外的好處,我現在可以存儲上次選擇的行,當我的應用程序被終止時,我可以在下次啓動時立即返回。

0

如果您使用NSFetchedResultsController來管理表,那麼您可以使用它的委託方法來響應更改。

使用controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:委託方法並檢查NSFetchedResultsChangeDelete更改類型。

您可以看到indexPath是否與表中當前選定的行匹配,然後根據該行進行操作。

+0

是的,我的代碼正是這樣做的。我丟失的是'[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]'刪除行,我該如何告訴tableview選擇下一行(或前一行,如果刪除的行是最後一行行。) –