8

UINib の instantiateWithOwner メソッドを介して xib ファイルからカスタム UITableViewCell をロードしようとすると、次のエラーが発生します。ここで見つけることができる他のすべての解決策を試してみましたが、うまくいきませんでした。問題は、xib ファイルが UINib によって開かれるときに、カスタム クラス ContentPackCell の代わりにスーパー クラス UITableViewCell を使用することです。インターフェイスビルダーのスクリーンショットを添付して、xib をクラスに関連付けた場所と識別子を関連付けた場所を示します。私が見逃している他のステップが必要です。

エラー:

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UITableViewCell 0x6b87220> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key descriptionLabel.'

コード (Apple のサンプル AdvancedTableViewCells プロジェクトに似ています):

ContentPackCell *cell = (ContentPackCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    [self.cellNib instantiateWithOwner:self options:nil];
    cell = tmpCell;
    self.tmpCell = nil;
}

IB でのカスタム クラスの設定

IB で識別子を設定する


アップデート:

ファイルの所有者のクラスを設定する

4

7 に答える 7

37

nib の File's Owner が NSObject に設定されていることを確認し、File's Owner に配線されたアウトレットがないことも確認します。

于 2012-11-09T00:20:49.333 に答える
5

nib のすべての要素をチェックして、もはや存在しないものを参照していないことを確認してください。それらを右クリックして、何が何を指しているかを確認します。そこには確かに何かがあるでしょう。

于 2012-08-31T12:33:40.967 に答える
2

nib の UILabel を、コード (descriptionLabel) にもう存在しない IBOutlet にリンクしたようです。

だからあなたのnibファイルをもう一度チェックしてください。私もこのエラーを数回経験しましたが、これが私にとっての解決策でした。

于 2012-08-31T12:14:21.267 に答える
1

まったく同じエラーが発生し、左側の「オブジェクト」でテーブルセルを右クリックしたときに、.h ファイルの IBOutlets が表示されなかったのに、ファイルの所有者でのみ表示されたのはなぜだろうと思っていました。xibファイルの「ビュー」でカスタムテーブルセルを左クリックし、属性インスペクターで「識別子」で正しいカスタム(tableViewCell)クラスに割り当てられたときに、アウトレットがテーブルセルに表示されることがわかりました「オブジェクト」で。たぶんこれが役立ちます!

于 2012-12-30T09:48:11.090 に答える
1

私の場合、コンパイル可能なソースのリストで .m の存在を確認することで問題は解決しました。

カスタム テーブル セル (または Interface Builder で必要なその他のもの) の新しいソースを名前変更、移動、または追加する場合は、それらを [プロジェクト] -> [ターゲット] -> -> [ビルド フェーズ] -> [コンパイル ソース] に追加する必要があります。

複数のターゲットがある場合は、すべてのターゲットをチェックしてください。私のプロジェクトでは、Aggregate のタイプのアクティブなターゲット (カスタム IPA ビルド スクリプトを使用) がありました。新しく追加された *.m ファイルには、アプリケーション タイプのターゲットのコンパイル ソース リストがないため、これが問題の原因だと思います。

于 2013-02-26T10:16:21.270 に答える
0

このように試してみましたか、

ContentPackCell *cell = (ContentPackCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
  [self.cellNib instantiateWithOwner:nil options:nil]; //Make owner nil
  cell = tmpCell;
  self.tmpCell = nil;
}

通常、そうすると、[[NSBundle mainBundle] loadNibNamed:@"ContentPackCell" owner:nil options:nil];今のようなエラーが発生します。したがって、「このクラスはキー値のコーディングに準拠していません」などのエラーが発生する場合は、どちらの場合もカスタム セルの「ファイル所有者」にクラスが設定されていないことが原因です。

于 2012-09-03T14:23:15.163 に答える
0
static NSString *CellIdentifier = @"CellIdentifierName";
ContentPackCell *cell = (ContentPackCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    [[NSBundle mainBundle] loadNibNamed:@"ContentPackCell" owner:self options:nil] ;
    cell=objCustomCell;
}
于 2012-08-31T12:53:10.093 に答える