0

ArticleCell と呼ばれる UITableViewCell サブクラスにジェスチャがあるため、スワイプすると UITableViewController クラスのメソッドが呼び出され、スワイプされたセルが削除されます。

デリゲート メソッドは次のようになります。

- (void)swipedToRemoveCell:(ArticleCell *)articleCell {
    NSIndexPath *indexPath = [self.tableView indexPathForCell:articleCell];

    [self.tableView beginUpdates];
    [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    [self.tableView endUpdates];

    [self.tableView reloadData];
}

しかし、スワイプするたびに、次のエラーが表示されます。

無効な更新: セクション 0 の行数が無効です

詳細: データ ソースに Core Data を使用するため、NSFetchedResultsController を使用します。そこで何かを更新する必要がありますか?(私はそのメソッドのどれにも触れていません。)

4

4 に答える 4

1

行を削除しているときに実際のオブジェクトをリストから削除していないため、行またはセクションのカウント数が間違っているために発生しています。リストも更新する必要があります。

行を削除するときにすでに行っているように、データをリロードする必要がないもう1つのこと。

于 2013-05-02T23:30:33.820 に答える
0

配列からそのオブジェクトを削除し、その後 tableView をリロードして、これを直接使用します。

- (void)swipedToRemoveCell:(ArticleCell *)articleCell {
    NSIndexPath *indexPath = [self.tableView indexPathForCell:articleCell];

    [DATASOURCE_ARRAY removeObjectAtIndex:indexPath.row]; // Here DATASOURCE_ARRAY is the array you are using as datasource of tableView
    [self.tableView reloadData];
}

お役に立てば幸いです。

于 2013-05-03T05:32:46.040 に答える
0

コアデータを使用しているので、これを行うことができます

削除アクションでこのコードを呼び出します

NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath];

[self.fetchedResultsController.managedObjectContext deleteObject:object];

この fetchcontroller デリゲートを上書きします ....

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
       atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
      newIndexPath:(NSIndexPath *)newIndexPath
{
    UITableView *tableView = self.tableViewIB;

    switch(type) {
        case NSFetchedResultsChangeInsert:
            [tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationMiddle];
            break;

        case NSFetchedResultsChangeDelete:
            [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
            break;

        case NSFetchedResultsChangeUpdate:
            [self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
            break;

        case NSFetchedResultsChangeMove:
            [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
            [tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
            break;
    }
}
于 2013-05-03T07:22:13.310 に答える