0

子ビューが削除された後、 UITableViewControllerが更新されたセルを再描画できないという問題があります。

これが何が起こっているかです。子ビューのデータを変更した後、親ビュー コントローラーはソース データ配列をリロードし、PostNotification を介して[tableView reloadData]を実行します。これがトリガーされた後、popViewControllerAnimatedを使用して親 UITableViewController に戻ります (これにより、スタックから子ビューがポップされ、コントローラーが 1 レベル上に表示されます)。

ただし、更新されたデータが親ビュー コントローラーに表示されません。デバッガーによると、セルのラベルは更新されていますが、表示されるラベルは変更されていません。ただし、テーブルをスクロールしてフリックすると、更新されたセルが一時的に表示されなくなり、再び表示されるとラベルが更新されます!

また、 viewWillAppear経由で[tableView reloadData]を呼び出してみましたが、問題は解決しません。

役立つ可能性のある追加情報を次に示します。次のような構造の 3 つのビューがあります。

1/  SettingsViewController : UITableViewController
2/  -- UserView : UITableViewController
3/  ---- UserDetailsView : UIViewController <UIActionSheetDelegate>

次のように UserView 内から UserDetailsView を呼び出しています。

 UserDetailsView *userDetailsView = [[UserDetailsView alloc] init];
 [self.navigationController pushViewController:userDetailsView animated:YES];

最上位のコントローラー (SettingsViewController) に戻り、問題のあるコントローラー (UserView) をロードすると、すべてが正しく描画されます。この問題が発生するのは、子ビューから戻ったときだけです。

ご提案いただきありがとうございます。

4

1 に答える 1

0

ペアコーディングの約1時間後に、最終的にこれを解決しました。

しばらくすると、reloadDataメッセージを送信するたびにtableViewが常にnullであることに気付きました。Objective Cでご存知かもしれませんが、nullオブジェクトは文句なしにメッセージを受け入れます。

「誰か」(ええと、それは私でした)がヘッダーファイルでこの行を定義したことがわかりました。

 UITableView *tableView;

これで、スマートCookieは、UITaleViewControllerを拡張するため、自分でtableViewへのポインターを作成する必要がないことを認識します。事実上、継承されたtableViewメンバーをnullオブジェクトに置き換えました。

謎が解けた。うまくいけば、これは他の誰かにも役立つでしょう!:D

于 2010-02-03T13:05:58.270 に答える