私のアプリケーションでは、TableViewから行を削除した後に TableView ( [tablView reloadData];
)canEditRowAtIndexPath
をリロードし、メソッドは常に (以前の)合計行数を呼び出します。
例えば:
TableView に5行ある場合、tableView から1行を削除します。削除後、TableView ( )をリロードしますが、メソッドは4 回 ではなく5 回呼び出しますか??[tablView reloadData]
canEditRowAtIndexPath
だから私は常に次のエラーが発生しました:
キャッチされていない例外 'NSRangeException' が原因でアプリを終了しています。理由: ' * **-[__NSArrayM objectAtIndex:]: 境界を超えたインデックス 5 [0 .. 4]'
また、少し遅れて(を使用してNSTimer
)テーブルをリロードしようとしましたが、うまくいきませんでした。
ここにいくつかのコードを入れます:
私はそのようなcanEditRowAtIndexPath
特定の行に適用します,@"status" isEqualToString:@"directory"
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"%d", self.listOfSounds.count);
// Return NO if you do not want the specified item to be editable.
if([[[self.listOfSounds objectAtIndex:indexPath.row] objectForKey:@"status"] isEqualToString:@"directory"])
return YES;
else
return NO;
}
削除行のコード:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
[self.sql_ deleteSoundFileAudioTableWhereMainID:[[self.listOfSounds objectAtIndex:indexPath.row] objectForKey:@"main_id"]]; /// delete record from DB
[self.listOfSounds removeObjectAtIndex:indexPath.row]; /// delete record from Array
[self updateListofSoundsFile]; /// Custom method
}
}
- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
return NO; // i also tried to return YES;
}
これが私updateListofSoundsFile
のカスタムメソッドコードです:
-(void)updateListofSoundsFile
{
if(self.listOfSounds.count > 0)
[self.listOfSounds removeAllObjects];
self.listOfSounds = [self.sql_ getAllDataFromAudioTable]; // get all record from DB
NSLog(@"%d",self.listOfSounds.count);
[self.tblView reloadData];
}
この問題を解決するにはどうすればよいですか?
ありがとう :)