In meiner Anwendung, lade ich meine Tableview ([tablView reloadData];
) nach Zeile löschen von Tableview dann canEditRowAtIndexPath
Methode rufen alle Tage für (durchlässig) Gesamtanzahl der Zeilen.Bei canEditRowAtIndexPath-Methode funktionieren reloadData von UITableView nicht richtig?
Beispiel:
Wenn i Zeilen auf meinem Tableview haben, i Reihe von Tableview dann löschen. Nach dem Löschen ich meine Tableview ([tablView reloadData]
) aber canEditRowAtIndexPath
Methode ruft 5 Mal statt 4 mal nachladen ??
Ich habe also immer Fehler Folgende:
Terminating app due to uncaught exception 'NSRangeException', reason: '* **-[__NSArrayM objectAtIndex:]: index 5 beyond bounds [0 .. 4]'
Ich habe auch versucht Tisch nach einer gewissen Verzögerung neu zu laden (mit NSTimer
), aber es für mich auch nicht funktioniert.
habe ich einige Code hier:
I canEditRowAtIndexPath
auf bestimmte Zeile anwenden, welche @"status" isEqualToString:@"directory"
so wie,
- (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;
}
Code of Zeile löschen:
- (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;
}
Hier updateListofSoundsFile
meine ist benutzerdefinierter Methodencode ist:
-(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];
}
Bitte geben Sie einen Vorschlag, Wie kann ich dieses Problem lösen?
Thanks :)
Veröffentlichen Sie Ihre Methode 'numberOfRowsInSection'. Frage - Warum rufen Sie in Ihrer 'commitEditingStyle'-Methode' updateListOfSoundsFile' auf? Sie aktualisieren bereits 'listOfSounds', indem Sie ein Objekt entfernen. Nachdem Sie das Objekt aus dem Array entfernt haben, rufen Sie einfach 'deleteRowsAtIndexPaths' auf, um eine Zeile aus der Tabelle zu entfernen.Stellen Sie außerdem sicher, dass Ihr Aufruf von "deleteSoundFileAudioTableWhereMainID" tatsächlich eine Zeile aus der Datenbank entfernt. – rmaddy