0

少し問題があり、物事がどのように機能するかを理解する必要があります。SO内で検索しましたが、有効な解決策が見つかりませんでした。

私のシナリオは次のとおりです。

methodUITableViewControllerを使用して (テーブル内で) セルをロードする があります。UINibinstantiateWithOwner:

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomTableViewCell *cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellClassName];
    if (!cell) {

        NSArray *topLevelItems = [cellLoader instantiateWithOwner:self options:nil];
        cell = [topLevelItems objectAtIndex:0];
    }

    // other stuff here...

    return cell;
}

セルは正しく表示されます。awakeFromNibここで、さまざまな基準に基づいて各セルをカスタマイズする必要があります。それを行う正しい場所はメソッドにあると思います。たとえば、CustomTableViewCell.m内でawakeFromNibは、次のようにオーバーライドします。

- (void)awakeFromNib
{
    // my internal stuff here
}

でもawakeFromNib呼ばれない。

私が間違っていることを説明していただけますか?

前もって感謝します。

4

2 に答える 2

1

実際には、「ここに他のもの」を示したコードをカスタマイズする必要があります。セルをリサイクルするため、使用するたびにセルが正しく構成されていることを確認する必要があります。

編集: テスト プロジェクトを作成し、awakeFromNib が実際にクラスに送信されることを確認しました。これにより、根本的な問題は、セルのあるペン先で、セルのクラスを CustomClass 名に設定していないことにあると思います。その唯一の可能な説明。

EDIT2:繰り返します:

  • CustomTableViewCell.xib では、オブジェクトのクラスが「CustomTableViewCell」に設定されています。

  • CustomTableViewCell.m にいくつかのログ メッセージを追加します - initWithCoder に: ある場合は awakeFromNib にも (スペルを確認してください!!!)

  • ここで「cell = [topLevelItems objectAtIndex:0];」をインスタンス化する場合、NSLog(@"Going to instantiate") の前にログを追加し、その後にログを追加します。

    NSLog(@"Instantiate a %@ cell", NSStringFromClass([cell class]);
    

ここで何かを与えなければなりません。展開のターゲットは何ですか? 私のテストでは、5.1を使用しました

于 2012-09-20T11:41:49.823 に答える
1

awakeFromNibを使用するときに呼び出されないという同じ問題がありましたinstantiateWithOwner。しかし、使用に戻しましたが[[NSBundle mainBundle] loadNibNamed:name owner:self options:nil]、問題は解決しませんでした。

次に、カスタム ビューの実装にテスト セレクターを追加すると、もちろん、認識されないセレクターでアプリがクラッシュしました。

そのため、少し歯ぎしりして髪を引っ張った後、それはかなり基本的なエラーであることが判明しました.

カスタム ビューに関連付けられた Xib で、Interface Builder の ID インスペクターに名前を入力するのを忘れていました。その結果、ランタイムは私のクラスがUIViewではなくのインスタンスであると考えましたMyCustomView。したがって、awakeFromNibブレークポイントはトリガーされませんでした。

結論: Xib が関連付けられたカスタム ビュー クラスを使用してこの問題が発生している場合は、クラス名が正しく設定されていることを確認してください。

ここに画像の説明を入力

于 2013-10-09T10:57:40.060 に答える