は、それが、これは以下のように、前回の詳細コントローラと新しいナビゲーションコントローラにviewControllersプロパティを設定することによって達成することができますすることができます。それ以外の場合は、ストーリーボード内のナビゲーションコントローラ内で再利用したいコントローラーを置くための追加ステップが必要になります。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"showDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
UINavigationController* navigationController = (UINavigationController*)[segue destinationViewController];
// retrieve previous detail controller.
DetailViewController* controller = self.detailViewController;
if(controller){
// if we have an existing detail controller then set it on the navigation controller.
navigationController.viewControllers = @[controller];
}
else{
// this must be the first time, so store the detail view controller for next time, and we don't need to modify the navigation controller in this case.
controller = (DetailViewController *)[navigationController topViewController];
self.detailViewController = controller;
}
// update the detail controller as normal.
[controller setDetailItem:object];
controller.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem;
controller.navigationItem.leftItemsSupplementBackButton = YES;
}
}
がストーリーボード毎回からアーカイブされていない詳細コントローラがあり、残念ながらそのビューにもロードされていることのオーバーヘッドがあります。しかし、すぐに割り当てが解除され、Applesのテンプレートではデフォルトの動作はディテール・コントローラがロードされていて破棄されているので、それが気にならない場合はおそらくそのようにするのが安全でしょう。
MVCパターンによると、共有オブジェクトまたはNSUserDefaultsにユーザー値を保存する必要があります。あなたの質問は完全に正しいわけではありません –
あなたは正しいですが、この機能は実装されておらず、将来登場するでしょう!これは私の問題を解決するだろうが、ViewControllerをこのメソッドで再利用できるかどうか、問題は同じですか?私はこれが不可能ではないと思います。 – matzino