2012-02-24 6 views
5

私のアプリケーションは場所データを使用し、それをテーブルとマップの両方で表示します。ストーリーボードを使用してタブバーコントローラを初期コントローラとして使用してUIManagedDocumentを共有するにはどうすればよいですか?

タブバーコントローラで始まり、それぞれのビューはナビゲーションコントローラ(テーブルビュー用、マップ用など)です。

同じManaged Object Contextを使用するためにUIManagedObjectを共有したいので、ユーザーがテーブルビューで更新すると、マップのデータも更新されるため、2回更新する必要はありません。

私はTab Bar Controllerをサブクラス化し、プロパティとしてUIManagedDocumentを追加し、それをsegueの準備メソッドの各コントローラに渡すことを考えました。しかし、私は、UITabBarControllerはサブクラス化されていないことを読んでいます。

もう1つの方法として、View Controllerを作成し、管理対象ドキュメントをプロパティとして追加し、タブバーを作成する方法があります。しかし私は、私のストーリーボードは、グラフィカルにいくつかの関係を示し、他のものはちょうどコードで示すことで、不明瞭または不一致であると思います。

どちらが適切ですか?それとももっと良い方法がありますか?

ご協力いただきありがとうございます。

答えて

3
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
if ([[segue identifier] isEqualToString:@"showGuide"]) 
    { 
     UITabBarController *tabBarController = (UITabBarController *)[segue destinationViewController]; 
     for (id vc in tabBarController.viewControllers) {  
      [vc setValue:_document forKey:@"document"];    
    } 
} 
+0

は、私は、App代理人であることを行うべきでしょうか? – Armando

+0

いいえ、これはTabBarControllerの前に立っているViewControllerで記述する必要があります。 私がここで使用したものは、Key Value Codingデザインパターンと呼ばれました。 これを使用して、各TabBarControllerのコントローラの "document"プロパティをself.documentに割り当てました。 – Shmidt

+0

UIManagedDocumentを使用するための良いチュートリアル:http://www.informit.com/articles/article.aspx?p=1842295&seqNum=10 – Shmidt

2

私もこの問題に走ったと私はブロックを経由してロードされたドキュメントへのアクセスを提供する別の文書ハンドラクラスに落ち着きました。

[[MYDocumentHandler sharedDocumentHandler] performWithDocument:^(UIManagedDocument *document) { 
    // Do stuff with the document, set up a fetched results controller, whatever. 
}]; 

私は自分のソリューションを書かれており、ここにコードを掲載しました:Core Data with a Single Shared UIManagedDocument

関連する問題