My RootViewControllerには、単純なテーブルビューが含まれています。表内の項目の1つを選択すると、DetailViewControllerが選択された項目の詳細が表示されます。関連するデータオブジェクトのデータは、CoreDataを介してロードされ、永続化されます。 didSelectRowAtIndexPath:メソッドのFetchedResultsControllerとManagedObjectContextをDetailViewControllerに渡すにはどうすればいいですか? DetailViewController.hの両方のプロパティを定義する必要がありますか?コードサンプルを私に提供できますか?要するに複数のView ControllerでFetchedResultsControllerとManagedObjectContextを使用する
答えて
最初に、各フェッチ結果コントローラ(FRC)インスタンスは各テーブルビューに固有に設定されるため、FRCをtableviewコントローラからtableviewコントローラに渡すことはありません。代わりに、各テーブルビューコントローラは、そのテーブルビュー専用の新しいFRCをインスタンス化して構成します。
テーブルビューがマスタービューであるマスター/ディテールデザインでは、FRCを詳細ビューに渡すのではなく、選択したテーブルビュー行で表される単一の管理オブジェクトだけを渡します。
アップルは、管理オブジェクトコンテキスト(MOC)を「依存性注入」によって渡すことを推奨しています。これは非常に簡単です。最も一般的な設計では、アプリケーションデリゲートのMOCを初期化し、それぞれのビューコントローラにmanagedObjectContext
プロパティを指定します。次に、View Controllerをロード/プッシュするときは、MOCに対してプロパティーをmanagedObjectContext
に設定するだけです。
たとえば、マスター/ディテールデザインでは、通常、ナビゲーションコントローラ(NAV)があります。これがどのように機能するかを確認するには、Xcodeでナビゲーションベースのアプリテンプレートを使用してテストアプリを作成します。コアデータを使用するようにマークします。アプリデリゲートとRootViewController
の両方にmanagedObjectContext
というプロパティがあります。アプリデリゲートのapplicationDidFinishLaunching:...
方法で今
それのように見えるようにするコードを追加します。その後、RootViewController.m
アドオンで...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
// Add the navigation controller's view to the window and display.
RootViewController *topVC=(RootViewController *) self.navigationController.topViewController;
topVC.managedObjectContext=self.managedObjectContext;
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
を:
- (void)viewDidAppear:(BOOL)animated
{
NSLog(@"self.managedObjectContext = %@",self.managedObjectContext);
[super viewDidAppear:animated];
}
テスト・アプリケーションを実行しますRootViewController
オブジェクトは、managedObjectContext
のようなプロパティをログに記録します。
2011-07-19 09:24:05.193 CDNavTemplate[3203:207] self.managedObjectContext = <NSManagedObjectContext: 0x4d318a0>
... RootViewController
オブジェクトに、アプリケーションデリゲートの管理オブジェクトコンテキストがあることを証明します。
ナビゲーションコントローラのスタックにプッシュしたすべてのビューコントローラに対して、同じプロセスを繰り返して、同じ管理対象オブジェクトコンテキストオブジェクトを順番にビュー階層に渡します。他のタイプのオブジェクトも同じ方法で渡すことができます。
Appleは、コードをモジュール化し、単一のアプリケーション内で複数の管理オブジェクトコンテキストを使いやすくするため、依存性注入を推奨しています。特定の時間に必要な特定のコンテキストを各ビューコントローラに渡すだけです。
、二つのオプションがある:
- これら(FetchedResultsControllerとManagedObjectContext)の両方は、ビューコントローラのすべてがそれらにアクセスできる場所にある必要があります。たとえば、XcodeがデフォルトでManagedObjectContextを配置するApp Delegate内にある場合、この方法でアクセスすることができます(警告が表示されるため、アプリケーションのアプリケーションデリゲートクラスにデリゲートを入力する必要があります) :あなたがそれらを作成するときに
NSManagedObjectContext *context = [[[UIApplication sharedApplication] delegate] managedObjectContext];
- あなたが実際にあなたのビューコントローラにこれらの値を渡すことができます。たとえば、サブクラス(DataViewControllerなど)を作成し、このサブクラス(ManagedObjectContextおよびFetchedResultsController用)に2つのプロパティを設定すると、それらを作成するときに設定されます。
FRCが各テーブルビューに固有であるため、フェッチされた結果コントローラをビューコントローラからビューコントローラに渡すべきではありません。各テーブルビューには独自のFRCが必要です。 – TechZen
- 1. 複数のView Controllerで同じNIBを使用する
- 2. 複数のView ControllerでGameCenterManagerを使用する方法
- 3. NSNotificationCenterセレクタメソッドを複数のView Controllerで使用できますか?
- 4. TabBarItemの複数のView Controller
- 5. Xcodeで複数のView Controllerで@IBActionと@IBOutletを使用する方法
- 6. iOSのView Controllerで複数のView Controllerを表示する方法
- 7. フェッチプロパティと複数ManagedObjectContext
- 8. fetchedResultsControllerで複数のsectionNameKeyPathを使用できますか?
- 9. 複数のView Controller上のiAd
- 10. 複数のView ControllerへのUITableViewCell
- 11. View Controllerで変数を使用して乗算する
- 12. コアデータ複数のManagedObjectContext
- 13. 別のView ControllerでView Controllerを起動する方法は?
- 14. AppDelegateから複数のView Controllerをインスタンス化する方法は?
- 15. 複数のView Controllerを解除するには
- 16. Swift同じView Controllerに複数のクラスを追加する
- 17. 私のUiで複数のView Controllerを扱う
- 18. コンテナビュー内の別のView ControllerからView Controllerをロードする
- 19. View Controllerを使用していないPresent View Controller - 短期/目的-C
- 20. View Controller NIBを別のView Controllerに追加する
- 21. 複数のView Controllerで1つのxibを使用するにはどうすればよいですか?
- 22. Tab Bar Itemに複数のView Controllerを持たせる方法
- 23. 2つのUIPickerViewsを同じView Controllerで使用するには?
- 24. 複数のView Controllerでアレイを使用するにはどうすればよいですか?
- 25. iPhoneやiPadのストーリーボード用に複数のView Controllerが必要ですか?
- 26. ストーリーボードからView Controllerをプログラムでページビューコントローラーで使用する
- 27. swift3でfetchedResultsControllerを使用する
- 28. View ControllerでRCTRootViewを使用するには?
- 29. 1つのコードブロックで複数のView Controllerをプッシュする際の問題
- 30. Swift:UICollectionViewCellでView Controllerを押す
これは私にとって非常に貴重な情報です。私はすべての書籍とドキュメンテーションでそのような説明を探していましたが、見つけられませんでした。おかげで束 - あなたは私の一日を作った! – Otto64
ドキュメントや書籍を書いている人は、APIを十分に理解しているので、初心者を混乱させるものを理解することは難しいです。トレーニングの分野では大きな問題です。私はいつもそれに対処しなければならない。 – TechZen
甘い、すばらしい説明サー。 – nmdias