ユーザーが保存した(Documentsフォルダーからの)pdfファイルのリストを表示するUITableViewがあります。
テーブル内の唯一の行を削除しようとすると、正常に機能します。
しかし、行が複数ある場合、たとえば 3 番目の行を削除しようとすると、..
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (2) must be equal to the number of rows contained in that section before the update (2), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'
ここで、配列カウントが > 0 であるかどうかを確認しようとしました。その場合は行を削除し、そうでない場合は indexSet を削除しましたが、運がありませんでした。
これは私が使用しているコードです
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
[tableView beginUpdates];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
NSError *error;
NSFileManager *fileMgr = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory
stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",[self.pdfArray objectAtIndex:indexPath.row]]];
if ([fileMgr removeItemAtPath:filePath error:&error] != YES)
{ UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Error" message:[NSString stringWithFormat:NSLocalizedString(@"UnableToDeleteFile", @"Unable to delete file: %@"),[error localizedDescription]] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] autorelease];
[alert show];
}
[self.pdfArray removeObjectAtIndex:indexPath.row];
[self refreshTable];
[tableView endUpdates];
}
[self.tableView reloadData];
}
[self refreshTable] は、PDF が保存されていないことを示すラベルが付いたビューを示しています。
- (void) refreshTable {
[self fillArray];
[self.tableView reloadData];
if (self.pdfArray.count == 0)
{
[UIView animateWithDuration:1.0f animations:^{
noPDF.view.alpha = 1;
}];
self.navigationItem.rightBarButtonItem = nil;
self.tableView.userInteractionEnabled = NO;
}
else
{
noPDF.view.alpha = 0;
self.navigationItem.rightBarButtonItem = self.editButtonItem;
self.tableView.userInteractionEnabled = YES;
}
}
さて、これをどのように解決できるか実際にはわかりませんので、どんな助けでも大歓迎です!