1

UITableView コントロールを使用して、ユーザーが編集できるデータを表示しています。詳細を編集するには、ユーザーが編集ボタンをタップして、新しいビューをスタックにプッシュします。ユーザーがデータを編集し、保存ボタンをタップすると、データが plist に保存され、ビューがスタックからポップされます。plist が更新されても、UITableView にはまだ古いデータが表示されます。これは、viewWillAppear メソッドに reloadData の呼び出しを追加することで修正できます。しかし、ビューが最初にロードされたとき、データは正しく表示されますが、reload ステートメントを追加することによって、これは二重バインドを意味しますか? もしそうなら、どうすればこれを回避できますか?

reloadData を明示的に呼び出さずに強制的に更新する次のコード ( here ) を見つけました。

- (void) viewWillAppear:(BOOL)animated
 {
 [super viewWillAppear:animated];
 int orientation = [[UIDevice currentDevice] orientation];
 if(orientation != UIDeviceOrientationUnknown)
   [self willRotateToInterfaceOrientation:orientation duration:0];
 }

これがどのように/なぜ機能するのか、誰でも説明できますか?

4

2 に答える 2

1

リンクからのトリックは、汚いハックです。データをリロードするだけでなく、テーブルを強制的に再描画します。これは、デバイスが新しい方向を取得していることをアプリに通知するため、他の UI 要素と共にテーブルが再描画されます。

単一の行または特定の行のセットを更新する標準的な方法は、UITableViewそのreloadRowsAtIndexPaths:withRowAnimation:メソッドを呼び出すことです。これにより、データ ソースを呼び出して、更新された行のみのデータを取得し、完全な再読み込みを防ぎます。

于 2012-07-02T13:33:50.293 に答える
1

これを行う:

 - (void) viewWillAppear:(BOOL)animated
 {
  [super viewWillAppear:animated];

  //remove all objects from yourTableViewDataSourceArray
  [yourTableViewDataSourceArray  removeAllObjects];

  //add new records from plist 
  yourTableViewDataSourceArray = plist request of data here

  //reload table now
  [yourtableView reloadData];
 }
于 2012-07-02T13:37:08.873 に答える