W mojej aplikacji przeładować mój Tableview ([tablView reloadData];
) po Usuń wiersz z Tableview następnie canEditRowAtIndexPath
Metoda sprecyzowane wezwanie do (przepuszczalnego) całkowita liczba wierszy.W metodzie canEditRowAtIndexPath, reloadData z UITableView nie działa poprawnie?
Na przykład:
Jeżeli muszę rzędach na mego Tableview, a następnie usunąć wiersz z Tableview. Po usunięciu I przeładować mój Tableview ([tablView reloadData]
) ale canEditRowAtIndexPath
Metoda nazywa 5 czasu zamiast 4 razy ??
więc zawsze dostaje Po błąd:
Terminating app due to uncaught exception 'NSRangeException', reason: '* **-[__NSArrayM objectAtIndex:]: index 5 beyond bounds [0 .. 4]'
Próbowałem też przeładować tabeli po pewnym opóźnieniem (używając NSTimer
), ale to też nie pracował dla mnie.
umieścić jakiś kod tutaj:
ubiegać canEditRowAtIndexPath
na określonego wiersza który @"status" isEqualToString:@"directory"
takie jak,
- (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;
}
Kodeks Usuń wiersz:
- (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;
}
Tutaj updateListofSoundsFile
jest mój Kod metody niestandardowej to:
-(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];
}
Podaj wszelkie sugestie, Jak mogę rozwiązać ten problem?
Dzięki :)
Opublikuj swoją metodę 'numberOfRowsInSection'. Pytanie: Dlaczego w metodzie 'commitEditingStyle' wywołujesz' updateListOfSoundsFile'? Już aktualizujesz 'listOfSounds', usuwając jeden obiekt. Po usunięciu obiektu z tablicy, po prostu wywołaj 'deleteRowsAtIndexPaths', aby usunąć jeden wiersz z tabeli.Sprawdź także, czy twoje wywołanie 'deleteSoundFileAudioTableWhereMainID' faktycznie usuwa jeden wiersz z bazy danych. – rmaddy