16

これは突然起こり始めました。任意のアイデア: コード:

CUSTOMCLASSNAME (クライアントの名前が含まれているため、実際のクラス名を置き換えました。)

私のtableViewの初期化:

[self.tableView registerClass:[CUSTOMCLASSNAME class] forCellReuseIdentifier:[self reuseIdentifier]];

行のセル内:

こんにちは、コンソールにタイトルが表示されています。これは私の cellForRow です:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    AVTCheckListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[self reuseIdentifier] forIndexPath:indexPath];

    [self configureCell:cell atIndexPath:indexPath];

    return cell;
}

- (void)configureCell:(AVTCheckListTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
    ChecklistGroup *group = [self.checklistFetchedResultsController.fetchedObjects objectAtIndex:indexPath.section];

    ChecklistItem *item = [self getChecklistItemForIndexPath:indexPath];

    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    [[cell cellTextView] setAttributedText:[[item checked] boolValue] ? [[NSAttributedString alloc] initWithString:[item name] attributes:@{ NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle) } ] : [[NSAttributedString alloc] initWithString:[item name]]];
    [[cell cellTextView] setUserInteractionEnabled:[[group isUserDefined] boolValue]];
    [[cell cellTextView] setTag:indexPath.row];
    [[cell cellTextView] setDelegate:self];
    [[cell tickImage] setHidden:![[item checked] boolValue]];
}

//Method that returns re-use:

- (NSString *) reuseIdentifier {
    return @"CheckListTableView";
}
4

13 に答える 13

59

from[cell contentView]の代わりにReturncelltableView:viewForHeaderInSection:

編集:これにより、UI ボタン​​の長押しジェスチャで何らかの理由でクラッシュが発生しました。それを修正するために、私はあきらめて、単一の項目を持つ別のセクションを偽のセクション ヘッダーとして使用しました。

于 2014-01-23T20:57:59.683 に答える
7

このエラー メッセージの原因を突き止めました。

AUITableViewCellは通常のビューとして使用されていました。したがって、その 'indexPathは設定されませんでした。私たちの場合、1つはによって返されていましたviewForHeaderInSection:

お役に立てれば。

クリス

于 2013-09-26T16:01:02.043 に答える
1

ええと、私はこれを理解しようとして 1 日の大半を費やしただけなので、この別の説明が誰かの時間を節約できることを願っています。

ロード中に時々このメッセージを出すテーブルビューがありました。ビューの読み込み中に発生する Core Data オブジェクトの KVO 通知が原因であることが判明しました。(変更を観察すると、コントローラーは問題のテーブルビューで reloadData を呼び出してみました。ビューの読み込みが完了するまでオブジェクトを観察しないことで修正されました(以前は、アクセサーを介して割り当てられたオブジェクトを観察し始めました)

TLDR: メイン スレッド以外からデータをリロードしようとしていないか確認してください。

さらに良い:

これは、子管理対象オブジェクト コンテキストを使用し、適切なタイミングでのみメイン スレッドのメイン MOC に変更をマージし直せば (私が発見したように、実際にそうすべきであることがわかりました)、遭遇しない問題です。

于 2014-04-09T11:17:55.600 に答える
1

私は数日後にこれを解決しました。私のカスタムセルにはtextViewがあり、それをcontentViewに追加していたとき、私はこれをしていました:

[self.cellTextView setClearsOnInsertion:YES];

これが問題の原因でした。他の誰かが同様の問題を抱えている場合に備えて。

幸せなコーディング:-)

于 2013-09-03T09:53:31.317 に答える
-1

次のことを試すことができますか (そのインデックスパスのセルに特定の構成がない場合):-

CustomClassName *cell=[tableView dequeueReusableCellWithIdentifier:[self reuseIdentifier]];
if(cell==nil)
{
cell=[[CustomClassName alloc] initWithStyle:whatever_style reuseIdentifer:[self reuseIdentifier]];
}

上記が機能しない場合に発生するエラーも投稿してください。

次のリンクもご覧ください。

iOS 6/7 で「再利用されているテーブル セルのインデックス パスがありません」というメッセージの意味は何ですか?

于 2013-08-28T14:49:10.330 に答える