在我的应用程序中,我在从 TableView 删除行之后重新加载我的 TableView ( [tablView reloadData];
)canEditRowAtIndexPath
,然后方法总是调用(pervious)总行数。
例如:
如果我的 TableView 上有5行,那么我从 tableView 中删除1行。删除后,我重新加载了我的 TableView ( [tablView reloadData]
)但canEditRowAtIndexPath
方法调用了5 次 而不是4 次??
所以我总是得到以下错误:
由于未捕获的异常“NSRangeException”而终止应用程序,原因: “ * **-[__NSArrayM objectAtIndex:]: index 5 beyond bounds [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];
}
请给任何建议,我该如何解决这个问题?
谢谢 :)