我正在尝试使用UICollectionView创建一个简单的日历。一切似乎都很好。我需要根据月份来交换日历,即当我单击按钮时,月份应该更改为上个月,所有单元格中的文本应该根据上个月来更改。我尝试使用collectionview!.reloadData()
,但我的应用程序因此而崩溃。我甚至试着删除所有的单元格,然后重新加载,但它也不起作用。
下面是我的代码:
@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())!)
}
我的错误:
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).
我是swift和iOS开发的新手,所以也许我错过了一个非常简单的点。请帮助我。
更新
我终于明白了原因。这是因为当我添加某个特定月份的单元格时,我是根据工作日添加它们的。因此,如果该月的第一天是星期二,我会在开始时添加2个额外的单元格,以跳过星期日和星期一。这就是为什么更新前后的单元格数量会发生冲突。还有什么方法可以解决这个问题?
1条答案
按热度按时间piok6c0g1#
我终于解决了这个问题。对于任何遇到同样问题的人:使用
reloadData()
,它会非常好地工作。我的应用程序崩溃了,因为它在我的days
数组中的索引用完了。希望这对你有帮助:)