2016-07-12 17 views
0

ich diesen Code habe zu löschen:EXC_BAD_ACCESS wenn ich versuche, einen UITableView Abschnitt

// - Update the data source 
    self.order.persons.removeAtIndex(index) 

    // - Disable the user interaction 
    self.tableView.userInteractionEnabled = false 

    // - Delete the needed section from the table view 
    let sectionIndexSet = NSIndexSet(index: self.order.persons.count - 1) 
    self.tableView.beginUpdates() 
    self.tableView.deleteSections(sectionIndexSet, withRowAnimation: .Automatic) 
    self.tableView.endUpdates() 

    // - Update the table view with a delay to update all the indexes 
    NSTimer.scheduledTimerWithTimeInterval(0.3, handler: { 
      self.tableView.userInteractionEnabled = true 
      self.tableView.reloadData() 
     }) 

So ist das Problem:

  • Fall 1: Wenn auf der sichtbaren Zone der Tabellenansicht ist eine weitere Abschnitte, nicht nur die, die ich löschen möchte, funktioniert alles super.

  • CASE 2: Wenn auf der sichtbaren Zone der Tabellenansicht ist nur der Abschnitt, den ich, den Debugger Stopp an der Linie löschen möchten:

    self.tableView.endUpdates()

und gibt den Fehler:

Thread 1: EXC_BAD_ACCESS (code=1, address=0x0).

ich verstehe nicht, warum Fall 1 ist große Arbeit, aber Fall 2 nicht. Zur Information verwende ich wiederverwendbare Zellen.

+0

bitte, teilen sich die ganze stacktrace – ddb

+0

Zunächst Sie müssen den 'NSIndexSet' Initialisierer mit' verwenden row' und 'section' Parameter. Zweitens löschen Sie die Zeilen 'beginUpdates',' endUpdates' und 'reloadData',' deleteSections' arrangiert die Tabellenansicht automatisch neu und 'begin/endUpdates' wird für einen einzelnen Löschvorgang nicht benötigt. Und zu guter Letzt müssen Sie alle entsprechenden Elemente auch im Datenquellen-Array löschen ** bevor Sie 'deleteSections' aufrufen. – vadian

+0

@vadian Ich habe versucht, ohne 'begin/endUpdates' oder' reloadData' und das gleiche Ergebnis. 'NSIndexSet' hat keinen Initialisierer mit Zeile und Abschnitt,' NSIndexPath' hat einen, aber in meinem Fall muss ich einen Abschnitt löschen, daher kann ich 'NSIndexPath' nicht verwenden. –

Antwort

0

Du verschiedene Daten von der Quelle zu entfernen und in Tableview

AUSGABE

// - Delete the needed section from the table view 
    let sectionIndexSet = NSIndexSet(index: self.order.persons.count - 1) 

FIX sollte es sein

// - Delete the needed section from the table view 
    let sectionIndexSet = NSIndexSet(index: index) 
+0

Ja, das ist ein logisches Problem, danke, aber das Problem mit 'Thread 1: EXC_BAD_ACCESS (code = 1, Adresse = 0x0)' bleibt bestehen. –

+0

Was löst das Löschen von a aus? Abschnitt in Ihrer Tabellenansicht? – nadi9

+0

Einer der Gründe für EXC_BAD_ACCESS (code = 1, address = 0x0) liegt vor, wenn es einen Unterschied in der Datenquelle und den in UITableView sichtbaren Abschnitten gibt. Ich würde vorschlagen, dass Sie Ihren Code erneut überprüfen solch ein logisches Problem! –

Verwandte Themen