我正在尝试使用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个额外的单元格以跳过星期日和星期一。这就是更新之前和之后的单元数量相互矛盾的原因。 解决这个问题的另一种方法是什么?
答案 0 :(得分:0)
我终于解决了这个问题。
对于遇到相同问题的任何人:
使用reloadData()
,它将完美地运行。我的应用程序崩溃了,因为我的days
数组中的索引用完了。
希望这会有所帮助:)
答案 1 :(得分:0)
DispatchQueue.main.async {
self.collectionView.reloadData()
}
它对我有用。