4

から継承するクラスがUITableViewCellあり、たくさんのIBOutlets. 以前は、セルを再利用し、必要に応じて初期化するという方法でこのオブジェクトを使用していました。このメソッドは遅すぎるため、UITableViewCellオブジェクトの配列を作成し、必要に応じてcellForRowAtIndexPath:メソッドに追加することにしました。

オブジェクト以外はすべて正常にロードされIBOutletます。awakeFromNibは呼び出されないので、これは私の問題と関係があると思います。

関数内のセルを初期化していたときに正常に呼び出されたことを明確にするためにcellForRowAtIndexPath、ビューコントローラーメソッドでセルをプリロードしようとしたときにviewWillAppear壊れました。

4

2 に答える 2

0

私はこれが古い質問であることを知っています。しかし、会話を読んだ後、私は何らかの意見を述べなければならないと感じました. これは、あなたがここで扱っている多層的な問題です。

まず、「プリロード」と言うとき、正確にはどういう意味ですか? あなたはあなたに電話dequeueReusableCellWithIdentifierしていますviewWillAppearか?または、init. いずれにせよ、これは受け入れられる慣行ではありません。

UITableViewCells は「再利用可能」であることを覚えておいてください。つまり、UITableView は実際には、画面外にあるUITableViewCellsときに のアンロードとロードを処理して、パフォーマンス (メモリではなく、信じられないかもしれません) やその他のことを最適化します。本質的に、これはテーブル ビューを効率的に維持するための非常に気の利いた「ハック」です。あなたのUITableViewが遅すぎる場合は、実装ではなく、何か間違ったことをしていますUITableView

それらを「プリロード」していると言うと、使用法にすぐに危険信号が表示されます。そして、「メソッドが遅すぎる」と言うとき、そうではありません。UITableViews と UICollectionViews のデリゲート/データソース メソッドは、計算された順序で発生します。それと戦わないでください。

第二に、呼び出されないという問題についてawakeFromNib。あなたは十分な情報を提供していません。どうやって初期化したの?ストーリーボード/ペン先で作成した場合は、initメソッドを呼び出すべきではありません。実際、iOS6 の時点では、 からの非 nil セルが保証されていますdequeueReusableCellWithIdentifier

于 2014-08-22T19:42:39.933 に答える
-1

次のようなスーパークラスを介して呼び出しましたか?

-(void)awakeFromNib
{
    [super awakeFromNib]; // Use this line 
}

お役に立てば幸いです。

于 2013-05-29T10:51:08.710 に答える