UITableView のセクションの最後の行を削除すると、このエラーが発生します。
*** キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了します。理由: '無効な更新: セクションの数が無効です。更新後のテーブル ビューに含まれるセクションの数 (2) は、更新前のテーブル ビューに含まれるセクションの数 (3) に、挿入または削除されたセクションの数をプラスまたはマイナスした値 (0 挿入、0削除されました)」
配列のカウントが 0 より大きい場合、テーブルには 3 つのセクションがあります (ユーザーは自分で場所を追加できます)。配列が 0 の場合、テーブルには 2 つのセクションしか含まれていません。ここに問題があると思いますが、それを理解することはできません。
セルを削除して配列を更新するためのコードは次のとおりです。
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell* delCell = [tableView cellForRowAtIndexPath:indexPath];
delName = delCell.textLabel.text;
[self deleteLocation];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
-(void)deleteLocation {
NSLog(@"Name = %@",delName);
NSUserDefaults *customLocations = [NSUserDefaults standardUserDefaults];
NSUserDefaults *sharedPref = [NSUserDefaults standardUserDefaults];
[customLocations removeObjectForKey:delName];
[customLocations synchronize];
[customLoc removeObject:delName];
saveCustomLoc = [NSArray arrayWithArray:customLoc];
[sharedPref setObject:saveCustomLoc forKey:@"CustomLocations"];
[sharedPref synchronize];
NSLog(@"%@",saveCustomLoc);
NSLog(@"%lu",(unsigned long)[saveCustomLoc count]);
[self showAlert];
}
- (void) showAlert {
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Location Deleted"
message:@"The location has been deleted"
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
}
これは、最後のセルまでうまく機能します。
私のテーブルのセットアップ方法の例は次のとおりです。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
{
if ([customLoc count] == 0) { // If there is no data in the custom locations array the don't include that section
if (section == 0) {
return [serverSelection count];
}
else {
return [qServerSelection count];
}
}
else {
if (section == 0) {
return [customLoc count];
}
else if (section == 1) {
return [serverSelection count];
}
else {
return [qServerSelection count];
}
}
したがって、見出し/行数/セクション数などは、配列の内容に依存します。セルが削除されているセクションが消える (セクション 1 がセクション 0 に移動すると、突然 4 つのセルが表示される) という事実が問題を引き起こしていると思います。
これを回避する方法はありますか?