2010-12-16 10 views
1

私はIBで設計された単純なセルを持ち、reuseIdentifierが設定されています。以下のコードはとてもうまく動作します。しかし、NSLog()は結果が決してキャッシュされないことを示します。dequeueReusableCellWithIdentifier:識別子がloadNibNamedセルを取得しない

テーブルビューコントローラクラス:

- (UITableViewCell *)tableView:(UITableView *)tableView 
      cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    switch/case for various cell types 
    { 
     Foo * item = [results objectAtIndex:indexPath.row]; 
     return [MyCell tableView:tableView populatedCellWith:item]; 
    } 
} 

MyCellクラス..

+(UITableViewCell *)tableView:(UITableView *)tableView populatedCellWith:(Foo *)item 
{ 
    static NSString * identifier = @"XXX"; 

    MyCell *cell = (MyCell *) [tableView dequeueReusableCellWithIdentifier:identifier]; 
    if (cell == nil) { 
     NSArray * items = [[NSBundle mainBundle] loadNibNamed:@"MyCell" 
           owner:self options:nil]; 
     cell = [items objectAtIndex:0]; 

     assert(cell && [cell.reuseIdentifier isEqualToString:identifier]); 

     NSLog(@"That was a load - rather than a nice cache for %@", self.class); 
    } 
    fill out some stuff. 
    return cell; 

}

なぜこれがある - それは物事がたくさんより効率的になりますよう?ありがとうございます。

Dw。

+0

だから、複数回のNSLogを見ていますか?あなたの質問を明確にしようとしています。 –

+0

確かに - セル識別子( 'assert'チェックと同じもの)で設定されています。 –

答えて

0

テーブルビューセルを作成する方法では、セルをテーブルビューの再利用可能キューに配置することはできません。それを行うための唯一の方法は、

initWithStyle:reuseIdentifier: 

Initializes a table cell with a style and a reuse identifier and returns it to the caller. 

を使用することです私の別のquestion

0

セルにセル識別子が設定されていますか? UITableViewはこれらをキャッシュしません。

+0

xibに設定する必要があります。そうしないと、 'assert'は失敗しますか? – deanWombourne

+0

正しい - アサートが実際にセットとして確認したものです。次の時間に文字列値ではなくその識別子ポインタを取得する(例えば、識別子= cell.reuseIndentifierを使用して)何かばかげて(ポインタ比較を想定して)、その識別子ポインタを選択することは役に立たない。 –

+0

おっと、私は「assert」行を見逃していました、ごめんなさい。 'UITV'はさまざまな理由でキャッシュしないことを選ぶことができますが、通常、再利用識別子が見つからないか、単に十分なセルを持たない(キャッシングが必要な行が不十分です)。もしどちらも当てはまらなければ、私は迷っている。 – millenomi

関連する問題