2010-11-22 15 views
1

私はUITableView/UITableViewCellsで本当に奇妙な問題があります。UITableViewCellが表示時にリフレッシュされませんか?

私はItemViewControllerという名前の子オブジェクトを持つオブジェクトのリストを表示する単純なスタイルのUITableViewを持っています(引数の場合はMenuItemsViewController)。 MenuItemsViewControllerは、ユーザーがMenuItemsViewControllerでオブジェクトを選択すると、ItemViewControllerのmenuItemプロパティを変更するだけです。

ユーザーが最初の項目を選択すると、すべてが正常に表示されます。しかし、その後の他のアイテムの選択時には、ItemViewControllerの最初のセクションのデータは変更されません。つまり、最初のアイテムのプロパティが表示されます。 tableView:cellForRowAtIndexPath:tableView:willDisplayRowAtIndexPath:メソッドの最後にブレークポイントを設定し、表示されているセルを照会すると、textLabel/detailTextLabelプロパティがすべて正しいことが示されます。つまり、内部的には、それらは想定されている状態とまったく同じです。しかし、UITableViewはまだ正しい情報を表示していません。

何か助けていただければ幸いです。この問題は私を狂ったものにしています。私は、今私が尋ねていることを人々が誤解するかもしれないと思うような奇妙な問題であることを実証するために、ビデオをYouTubeに録画してアップロードしています。

編集:とビデオ - http://www.youtube.com/watch?v=AwHTaHCQtX8&feature=youtube_gdata_player

EDIT#2:だから、これは非常識です:ストレートデバッグおよびテストの6時間後に、それはNSManagedObjectにゲッターを呼び出すことによって、アニメーションの問題が生じているが判明しました失敗した...私はいいえアイデアなぜ。なし。私はこれがCore Data質問の一種だと思うので、タグとして追加します。

答えて

0

内容が変更されたことをテーブルビューに伝える必要があります。考えられる解決策は、ItemViewControllerのviewWillAppear:メソッドに[self.tableView reloadData]を追加することです。

ただし、me​​nuItemプロパティをオーバーライドし、変更されたセル/セクションのみをオーバーロードするコードを追加することをお勧めします。reloadRowsAtIndexPaths:withRowAnimation:/reloadRowsAtIndexPaths:withRowAnimation:をそれぞれ使用してください。

+0

質問に記載されているように自分のコードが正しくセルを生成しています - 再度reloadDataを呼び出しても役に立ちません – refulgentis

+0

ItemViewControllerのインスタンスを更新してロードするMenuItemsViewControllerメソッドのコードを表示できますか? – Kentzo

0

最初のテーブルビューでアイテムを選択すると、新しい子ビューコントローラを作成し、NSManagedObjectを子に渡して移入する必要があります。クライアントから親にポップすると、その子はdeallocされているはずです。あなたのビデオに基づいて子ビューコントローラを再利用しようとしていると思われます。そうしないと、この問題にぶつからないでしょう。

ここから始めましょう。実際にあなたがやっていることを確認できますか?そうでない場合は、どうしてですか?

関連する問題