1

Ich versuche, einen einfachen Kalender mit UICollectionView zu erstellen. Alles scheint gut zu funktionieren. Ich muss den Kalender nach Monaten handeln, d. H. Wenn ich auf eine Schaltfläche klicke, sollte der Monat in den vorherigen Monat geändert werden und der Text in allen Zellen sollte sich entsprechend dem vorherigen Monat ändern. Ich habe versucht, collectionview!.reloadData() verwenden, aber meine App stürzt deshalb ab. Ich habe sogar versucht, alle Zellen zu löschen und dann neu zu laden, aber es funktioniert auch nicht.Daten in einer UICollectionView neu laden - Swift

Hier ist mein Code:

@IBAction func prevMonth(){ 
    day = -1 
    if(month == 1){month = 12 
     year = year-1} 
    else{ 
     month = month-1} 
    let firstdate = "01-\(month)-\(year)" 
    let dcalender = NSCalendar.currentCalendar() 
    let formatter:NSDateFormatter = NSDateFormatter() 
    formatter.dateFormat = "dd-MM-yyyy" 
    let dateComponents = dcalender.components([.Weekday],fromDate: formatter.dateFromString(firstdate)!) 
    weekday = dateComponents.weekday 
    self.collectionView?.reloadItemsAtIndexPaths((self.collectionView?.indexPathsForVisibleItems())!) 
} 

Mein Fehler:

Invalid update: invalid number of items in section 1. The number of items contained in an existing section after the update (35) must be equal to the number of items contained in that section before the update (31), plus or minus the number of items inserted or deleted from that section (31 inserted, 31 deleted) and plus or minus the number of items moved into or out of that section (0 moved in, 0 moved out). 

: Ich bin zu schnell und zu iOS Entwicklung so vielleicht einen sehr einfachen Punkt ich fehle. Bitte hilf mir.

UPDATE

ich endlich verstanden, den Grund. Es passiert, weil wenn ich Zellen für einen bestimmten Monat hinzufüge, fügen ich sie entsprechend den Wochentagen hinzu. Wenn also der erste Tag des Monats ein Dienstag ist, füge ich am Anfang zwei zusätzliche Zellen hinzu, um Sonntag und Montag zu überspringen. Aus diesem Grund ist die Anzahl der Zellen vor und nach einem Update widersprüchlich. Was ist eine andere Möglichkeit, dies zu beheben?

Antwort

0

Ich habe diese Frage endlich gelöst. Für alle, die das gleiche Problem auftritt: Verwenden Sie reloadData() und es wird einwandfrei funktionieren. Meine App stürzte ab, weil in meinem Array days keine Indizes mehr vorhanden waren.

this helps :)

0
DispatchQueue.main.async { 
     self.collectionView.reloadData() 
    } 

Es funktioniert für mich.