rootViewControllerへのプッシュのViewControllerからの情報
-
27-09-2019 - |
質問
素朴な疑問のソート。私はnavigationcontrollerでテーブルビューを持っています。私は、セルをタッチすると、それは、細胞からの情報でビューコントローラをプッシュので、私は新しいビューで編集することができます。今(: " - >プッシュのViewController rootviewcontroller" 我々はinformationpathそれを呼び出すことができます)正しい作業のthats。編集された値がテーブルビューで表示することができますので、 - :私は新しいビューの保存]をクリックしたときに、私はpopviewcontroller(「> rootviewcontrollerプッシュのViewController」informationpath)を呼び出す前に、しかし、私はrootviewcontrollerへの旅行バックに編集した値を求めています。
をいただきました!これへの正しいアプローチ?
EDITます:
pushViewControllerとpopViewControllerが働いています。私は唯一の保存ボタン(popViewController)が呼び出されたときに、テーブルビューで表示するためrootViewControllerに編集された情報の背中を取得するための最善のアプローチを求めました。私はちょうど編集に直接プッシュのViewControllerからの新しい情報でPLISTを持っていますね。私はrootViewControllerに新しい情報を送信好むだろうけれども、それはPLISTファイルへのアクセスを処理します。
解決
私は同じような状況があります。最初のTVディスプレイデータベースレコードのリストと、1がタップされたときには、レコードの詳細を表示する第2テーブルビューに通過します。私は、ナビゲーションコントローラのスタックに詳細TableViewControllerを押すことによってこれを行います。これまでのところに行くと非常に簡単ます。
遭遇した問題の私はそれがレコードのリストを更新することができることを、詳細テーブルビュー(コントローラ)のレコードを更新した後、私はリストテーブルビューコントローラを知ることができるように望んでいたものだった。
私が最初に行がレコードのリストで選択されたときに、リストコントローラは詳細コントローラにエンティティを管理するコアデータを渡すことができるように詳細テーブルビューコントローラにプロパティを追加することでした。
と同時に、私はまた、このようなコアデータ変更イベントのオブザーバーとしてリストコントローラを追加します
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataSaved:) name:NSManagedObjectContextDidSaveNotification object:nil];
詳細テーブルビューとコントローラ更新レコードは、リストコントローラがそれのdataSaved:
メソッドが呼び出されたのであれば、NSNotificationオブジェクトを渡します。
dataSaved:
法では、私は、オブジェクトを調べ、編集中のコア・データ・エンティティが更新されたリストにある場合、私は更新が必要とされるシグナリングするフラグを設定します。挿入されたリスト内のレコードがある場合しかし、それはフラグがリストテーブルビューの完全な再読み込みをトリガするように設定されているように、新しいレコードは、作成され、データベースに挿入されたことを意味します。
リストビューコントローラにユーザが戻るが、viewDidAppear:
方法がトリガされます。この方法では、私は、フラグのいずれかの呼び出し
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
レコードが更新された場合、特定のレコードをリロードする、または新しいレコードの挿入がある場合、完全な再読み込みを行うには、テーブルビューを伝えるために。
最後に、それはもはや興味を持っているので、私はその後、コアデータの通知のオブザーバとしてリストコントローラを削除しません。
これは、これを行うために推奨される方法であれば、私は知らないが、これまでのところ、それは私のために働いています。
他のヒント
あなたはpopViewController前にreloadDataに試すことができますが、あなたには、いくつかのコードをポストする必要があります。
すべてのUIViewControllersはnavigationController
メソッドを持っています。あなたはナビゲーションコントローラにビューコントローラをプッシュすると、そのプロパティは、ナビゲーションコントローラをポイントに設定されています。
ですから、ビューコントローラでちょうどコール[self.navigationController popViewControllerAnimated:YES];
ます。
また、混同しないビューとView Controllerを行います。あなたはビュー内の[保存]をクリックすると、あなたは、保存ボタンあなたのビューコントローラ、ナビゲーションコントローラにターン会談でます。
のメソッドを呼び出すことを確認する必要があります
ここでは、そのようなデータの編集など、いくつかの操作を行います。 だから、最初の(IBActionを呼び出すことによって)保存ボタンをクリックした上で、変更を保存して、このIBActionメソッドで(変更が正常に保存されている)wheterチェックしますし、
を呼び出します[self.navigationController popViewControllerAnimated:YES];
と、(viewWillAppear方法でデータベースメソッドを呼び出して、このデータの変更アレイのため)が更新現在データベースによってそのテーブルのリロード自体を確実。