0

簡単な質問の並べ替え。私はナビゲーションコントローラのテーブルビューを持っています。セルに触れると、セルからの情報を含むビューコントローラがプッシュされるため、新しいビューで編集することができます。これで正しく動作しています( "rootviewcontroller - > push viewcontroller"という情報パスと呼ぶことができます)。しかし、新しいビューでsaveをクリックすると、popviewcontroller(informationpath: "push viewcontroller - > rootviewcontroller")を呼び出す前に編集した値をrootviewcontrollerに戻して、編集した値をtableviewに表示できるようにします。プッシュされたviewControllerからrootViewControllerへの情報

これにはどのような正しいアプローチがありますか?

編集:

pushViewControllerとpopViewControllerが動作しています。保存ボタン(popViewController)が呼び出されたときに、tableviewに表示するために編集した情報をrootViewControllerに戻すための最良の方法を求めました。私は、プッシュされたviewControllerから直接新しい情報でpListを編集する必要があると思います。私はrootViewControllerに新しい情報を送り、pListファイルへのアクセスを処理する方が好きです。

+0

こんにちはJohn、CoreDataを使用してデータを管理していますか?私たちが助けることができるようにあなたの実装に関するいくつかの詳細を投稿してください。 – Rog

答えて

0

私は同じ状況 - 2つのテーブルビューを持っています。最初のTVにはデータベースレコードのリストが表示され、タップされると、レコードの詳細を表示する2番目のTableViewに移動します。これは、TableViewControllerの詳細をナビゲーションコントローラスタックにプッシュすることで行います。これまでのところ、とてもシンプルになっています。

私が遭遇した問題は、詳細テーブルビュー(コントローラ)でレコードを更新した後、レコードのリストを更新できるように、リストテーブルビューコントローラに知らせたかったということでした。

まず、詳細テーブルビューコントローラにプロパティを追加して、レコードのリストで行が選択されたときにリストコントローラがコアデータ管理エンティティを詳細コントローラに渡すようにしました。同時に

が、私はまた、このようなコアデータ変更イベントのオブザーバーとしてリストコントローラを追加しました:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataSaved:) name:NSManagedObjectContextDidSaveNotification object:nil]; 

ので、詳細テーブルビューとコントローラがレコードを更新する場合は、リストコントローラですそれを持っていますdataSaved:メソッドが呼び出され、NSNotificationオブジェクトが渡されます。

dataSaved:メソッドでオブジェクトを調べ、編集中のコアデータエンティティが更新リストにある場合は、更新が必要であることを示すフラグを設定します。しかし、挿入されたリストにレコードがある場合は、新しいレコードが作成され、データベースに挿入されたことを意味します。したがって、リストテーブルビューの完全なリロードを開始するフラグが設定されます。

ユーザーがリストビューコントローラに戻ると、viewDidAppear:メソッドがトリガされます。この方法では、私は、フラグを調べて、いずれかの

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation 

は、レコードが更新された場合、特定のレコードをリロードする、または新しいレコードの挿入がある場合は、完全な再読み込みを行うには、テーブルビューを伝えるために呼び出します。

最後に、リストコントローラは、もはや興味がないので、コアデータ通知のオブザーバとして削除します。

これが推奨される方法であるかどうかはわかりませんが、これまでのところ私のために働いています。

+0

私はデータベースに直接アクセスしてしまいましたが、私はテストしました。この方法では... –

0

popViewControllerの前にreloadDataを試すことができますが、コードを投稿する必要があります。

0

すべてのUIViewControllerにはnavigationControllerメソッドがあります。ビューコントローラをナビゲーションコントローラにプッシュすると、そのプロパティはナビゲーションコントローラをポイントするように設定されます。

したがって、ビューコントローラで[self.navigationController popViewControllerAnimated:YES];と電話するだけです。

また、ビューとビューコントローラを混同しないでください。ビューで[保存]をクリックすると、保存ボタンがビューコントローラのメソッドを呼び出し、ナビゲーションコントローラと交信することを確認する必要があります。

0

行をタップすると、適切な情報で新しいビューに移動します。

ここでは、データの編集などの操作を行います。 だから最初(IBActionを呼び出すことによって)保存ボタンをクリックの上で変更を保存し、(変更が正常に保存されている)wheterこのIBAction方法でチェックしますし、[self.navigationController popViewControllerAnimated:YES]

を呼び出します。

また、更新されたdatabese(viewWillAppearメソッドのデータベースメソッドを呼び出すことによって、この変更されたデータ配列に対して)によってテーブルがリロードされるようにします。

関連する問題