0

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

これに対する正しいアプローチは何ですか?

編集:

pushViewController と popViewController は機能しています。Save-button (popViewController) が呼び出されたときに、編集された情報を rootViewController に戻してテーブルビューに表示するための最良の方法のみを求めました。プッシュされたviewControllerから直接新しい情報でpListを編集する必要があると思います。新しい情報を rootViewController に送信して、pList ファイルへのアクセスを処理することをお勧めします。

4

4 に答える 4

0

私は同じ状況にあります-2つのテーブルビュー。最初のテレビはデータベースレコードのリストを表示し、1つをタップすると、レコードの詳細を表示する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

レコードが更新された場合は特定のレコードをリロードするか、新しいレコードの挿入がある場合はテーブルビューにフルリロードを実行するように指示します。

最後に、関心がなくなったため、コアデータ通知のオブザーバーとしてリストコントローラーを削除します。

これが推奨される方法かどうかはわかりませんが、これまでのところうまくいっています。

于 2010-11-22T11:00:43.260 に答える
0

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

于 2010-11-22T10:05:36.147 に答える
0

行をタップすると、適切な情報を含む新しいビューが表示されます。

ここでは、データの編集などの操作を行います。したがって、最初に保存ボタンをクリックして変更を保存し(IBActionを呼び出すことにより)、このIBActionメソッドで(変更が正常に保存されたかどうかを確認してから)呼び出します

[self.navigationController popViewControllerAnimated:YES];

そして、更新されたデータベースによってテーブルが自動的にリロードされるようにします (この変更のために、viewWillAppear メソッドでデータベース メソッドを呼び出します)。

于 2010-11-22T10:14:49.643 に答える
0

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

したがって、[self.navigationController popViewControllerAnimated:YES];View Controller を呼び出すだけです。

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

于 2010-11-22T10:06:01.990 に答える