1. ホーム
  2. アイオス

[解決済み】dequeueReusableCellWithIdentifier:forIndexPathでアサーションに失敗しました。

2022-03-27 13:51:56

質問

私は学校のためにRSSリーダーを作り、コードを完成させました。テストを実行したところ、このようなエラーが発生しました。以下は、そのコードが参照しているものです。

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = 
     [tableView dequeueReusableCellWithIdentifier:CellIdentifier 
                                     forIndexPath:indexPath];
    if (cell == nil) {

        cell = 
         [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle  
                                reuseIdentifier:CellIdentifier];

    }

これが出力されたときのエラーです。

2012-10-04 20:13:05.356 リーダー[4390:c07]さん * アサーションに失敗しました。 -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:], /SourceCache/UIKit_Sim/UIKit-2372/UITableView.m:4460 2012-10-04 20:13:05.357 リーダー[4390:c07] *. キャッチできないため、アプリを終了する 例外 'NSInternalInconsistencyException', reason: 'unable to'. 識別子Cellを持つセルの待ち行列を解除する - nibまたはクラスを登録する必要があります。 を識別子に使うか、ストーリーボードでプロトタイプセルに接続します。 * 最初のスローコールスタック:(0x1c91012 0x10cee7e 0x1c90e78 0xb64f35 0xc7d14 0x39ff 0xd0f4b 0xd101f 0xb980b 0xca19b 0x6692d 0x10e26b0) 0x228dfc0 0x228233c 0x228deaf 0x1058cd 0x4e1a6 0x4ccbf 0x4cbd9 0x4be34 0x4bc6e 0x4ca29 0x4f922 0xf9fec 0x46bc4 0x47311 0x2cf3 0x137b7 0x13da7 0x14fab 0x26315 0x2724b 0x18cf8 0x1becdf9 0x1becad0 0x1c06bf5 0x1c06962 0x1c37bb6 0x1c36f44 0x1c36e1b 0x147da 0x1665c 0x2a02 0x2935) libc++abi.dylib: terminate が呼び出されて例外を発生させる

で、これがエラー画面に表示されるコードです。

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

よろしくお願いします

どのように解決するのですか?

を使用しています。 dequeueReusableCellWithIdentifier:forIndexPath: メソッドを使用します。 は、その ドキュメント には、このように書かれています。

重要です。 クラスまたは nib ファイルを登録する場合は、必ず registerNib:forCellReuseIdentifier: または registerClass:forCellReuseIdentifier: メソッドを呼び出してから、このメソッドを実行します。

再利用識別子のnibやクラスが登録されていません。 "Cell" .

あなたのコードを見ると、dequeue メソッドが返すことを期待しているようですね。 nil というのは、渡すべきセルを持っていない場合です。 その場合は dequeueReusableCellWithIdentifier: という動作をさせます。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

注目すべきは dequeueReusableCellWithIdentifier:dequeueReusableCellWithIdentifier:forIndexPath: は別のメソッドです。についてはdocを参照してください。 前者 後者 .

なぜ今まで dequeueReusableCellWithIdentifier:forIndexPath: , Q&A .