コードの更新: Matthewの答えに従って、より正確にコードを修正しようとしました。今のコードは、セルを削除しないだけでなく、クラッシュやエラーを与える:別のクラスを使用してセルを削除するとNSInvalidArgumentExceptionが発生する
* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0]'
次のコードは、私のCustomCell
コードであるcheckboxTapped
というアクションからです。アクションが発生すると、エラーが発生します。私はindexPath
がNULL
と等しいことを知りました。それはおそらく問題です。しかし、私はそれを修正する方法を知らない。
[self.textLabel setTextColor:[UIColor grayColor]];
[self.detailTextLabel setTextColor:[UIColor grayColor]];
parent = [[ViewController alloc] init];
db = [[DataObject alloc] init];
NSIndexPath *indexPath = [[parent tableView] indexPathForSelectedRow];
[[parent array] removeObjectAtIndex:[indexPath row]];
[db deleteTaskAtIndex:[indexPath row]];
[[parent tableView] deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[db release];
[parent release];
旧:私は私のコードを見て、私は私が使っていた私の配列を印刷し、大丈夫に見える、まだこのエラーが解決しません。
* Terminating app due to uncaught exception 'NSRangeException', reason: '* -[__NSArrayM removeObjectAtIndex:]: index 1 beyond bounds [0 .. 0]'
私の推測では、それは私のindexPath
とは何かを持っていたが、それは私がそれをどのように変化するかをはるかに異なることはないということでした。
-(void)checkboxTapped:(id)sender
{
[sender setSelected:YES];
[self.textLabel setTextColor:[UIColor grayColor]];
[self.detailTextLabel setTextColor:[UIColor grayColor]];
parent = [[ViewController alloc] init];
UITableView *tableView = parent.tableView;
NSMutableArray *array = [[NSMutableArray alloc] initWithArray:parent.array];
[parent release];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[array count] inSection:1];
[array removeObjectAtIndex:[indexPath row]];
[db deleteTaskAtIndex:[indexPath row]];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];
[array release];
[tableView endUpdates];
[tableView reloadData];
}
私は配列数を表示して '1'を表示しますので、' NSIndexPath * indexPath = [NSIndexPath indexPathWithIndex:array.count];で 'indexPath'宣言を切り替えました。今、私はこのエラーが発生します: '***キャッチされていない例外のためにアプリケーションを終了しています 'NSInternalInconsistencyException'、理由: 'UITableViewで使用するインデックスパスが無効です。表ビューに渡される索引パスには、セクションと行を指定する正確に2つの索引が含まれていなければなりません。可能であれば、UITableView.hのNSIndexPathのカテゴリを使用してください。 ' – Souljacker
'db'はデータソース(plist)内のアイテムの追加、編集、削除などのすべてのデータソースアクションを組み立てた' NSObject'を指します。そして、[配列リリース]の '[親リリース]'を変更してもエラーは表示されませんでしたが、まだ削除されていません! – Souljacker
更新されたコードを見てください。 – Souljacker