0

NSKeyedArchiver を使用して UITabBarController の状態を保存しようとしています。タブ内には、UITableViewControllers を含む UINavigationControllers があります。

アーカイブは問題なく動作しているようです。

アーカイブを解除すると、UITableViewControllers で奇妙な問題が発生します。initWithCoder: が正しく呼び出され、そこで最初に行っていることは [super initWithCoder:] の呼び出しです。

tableView は正しく再作成されたように見え、delegate および dataSource プロパティが既に設定されています。initWithCoder: が super を呼び出して self を返すだけの場合、テーブル ビューは空になり、デリゲート メソッドは呼び出されません。self.tableView のデリゲートと dataSource プロパティを接続すると、コンテンツが正しく表示されますが、選択時に didSelectRowAtIndexPath が呼び出されず、tableView がリロードされるまでスクロールできません。

initWithCoder: 新しい UITableView を作成すると、すべてが機能しますが、これを行う必要があるとは思いません。

これを試みてはいけないことをしていますか、それとも、正しく機能させるために追加する必要がある明らかな何かが欠けていますか?

更新:コントローラー内で設定self.tableView = [decoder decodeObjectForKey:@"tableView"]するとスクロール/選択の問題が解決するようですが、結果の tableView は常に UITableViewStylePlain であり、プロパティが既に設定されているため、まだ間違っているようです。

4

1 に答える 1

0

あなたのデザインパターンは確かに珍しいです。通常、テーブル ビューをアーカイブするのではなく、作成に使用されたデータのみをアーカイブします。その後、再びテーブル ビューが必要になった場合は、最初にテーブル ビューを作成したときと同じコードを使用して、それらのデータからテーブル ビューを再作成します。

于 2010-11-08T18:57:49.303 に答える