Ich habe diesen Fehler beim Versuch, eine Zelle löschen, mit einer benutzerdefinierten Schaltfläche aufgetreten.Löschen Sie UITableViewCell mit benutzerdefinierten UIButton
* Beenden app aufgrund nicht abgefangene Ausnahme 'NSRangeException', Grund: '* - [__ NSArrayM removeObjectAtIndex:]: Index 1 über Grenzen [0 .. 0]'
Heres, wie mein Code ist strukturiert. Ich habe eine benutzerdefinierte UITableViewCell
, die eine UIButton
enthält, die eine Aktion hat, die die Zelle löscht. Die Aktion zum Löschen der Zelle befindet sich in meinem Hauptsicht-Controller, der die tatsächlichen indexPath
für die Zellen enthält. Diese Struktur funktioniert gut.
Hier ist die Aktion zum Löschen der Zelle.
NSIndexPath *indexPath = [self globalIndexPath];
[self.array removeObjectAtIndex:[indexPath row]];
[db deleteTaskAtIndex:[indexPath row]];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationFade];
Wenn ich die indexPath
oben erklären, ist die globalIndexPath
Eigenschaft in meinem cellForRowAtIndexPath
, den Wert des ursprünglichen indexPath
geben. So habe ich es erklärt.
[self setGlobalIndexPath:indexPath];
Jetzt habe ich einige NSLogs
hier ein dort legte den indexPath
loggt sein. Zum Beispiel in der viewWillAppear
Methode und der viewDidLoad
Methode, und beide geben mir die genaue indexPath
, und ich überprüfte sogar die Ausgänge und alle von ihnen geben genaue Ergebnisse zurück, so dass ich wirklich nicht weiß, warum es mir den Fehler gibt.
Hier ist der Code in meiner benutzerdefinierten Zelle, um zu erkennen, wenn die Schaltfläche angetippt wird.
NSArray *notificationArray = [[UIApplication sharedApplication] scheduledLocalNotifications];
if (!notificationArray || !notificationArray.count)
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"DeleteSignal" object:nil];
}
else
{
UILocalNotification *notif = [notificationArray objectAtIndex:[checkbox tag]];
[[UIApplication sharedApplication] cancelLocalNotification:notif];
}
Und dann lösche ich die die Zelle die NSNotificationCenter
mit dem Schlüssel DeleteSignal
verwenden.
Versuchen Sie, einen Haltepunkt festzulegen, wenn [indexPath-Zeile]> = [self.array count] vor jedem Entfernen ...oder eine Behauptung, dass die Reihe kleiner als die Anzahl ist. Auch, wenn Sie mehrere Elemente löschen, ohne die Tabelle zu aktualisieren? –
Ich werde den Haltepunkt versuchen, aber ja, ich habe versucht, meine 'tableView' in meinem' viewDidLoad' und 'viewWillAppear' neu zu laden. – Souljacker
Ich habe eine if-Anweisung direkt vor und nach meinen Löschfunktionen und ein Protokoll erstellt, aber ich weiß nicht genau, wie das funktioniert. – Souljacker