我的应用由于尝试删除第1部分中的第1项而崩溃,但更新前只有1个部分'
我发现其他文章说数据源必须与collectionView或tableView保持同步,所以我从我的数组中删除了对象:在我删除我的collectionView中的项目之前的警报,这适用于didSelectItemAtIndexPath。但我不知道为什么这不起作用。
我也尝试打印array.count,它显示对象确实从数组中删除。
func disableAlarmAfterReceiving(notification: UILocalNotification) {
for alarm in alarms {
if alarm == notification.fireDate {
if let index = alarms.index(of: alarm) {
let indexPath = NSIndexPath(item: index, section: 1)
alarms.remove(at: index)
collectionView.deleteItems(at: [indexPath as IndexPath])
reloadCell()
}
}
}
}
func reloadCell() {
userDefaults.set(alarms, forKey: "alarms")
DispatchQueue.main.async {
self.collectionView.reloadData()
print("Cell reloaded")
print(self.alarms.count)
}
}
答案 0 :(得分:2)
您有单个部分,因此您需要从0
部分删除它。也可以直接使用Swift 3原生IndexPath
代替NSIndexPath
。
let indexPath = IndexPath(item: index, section: 0)
alarms.remove(at: index)
DispatchQueue.main.async {
collectionView.deleteItems(at: [indexPath])
}
编辑:从collectionView中删除项目后尝试打破循环。
if let index = alarms.index(of: alarm) {
let indexPath = IndexPath(item: index, section: 0)
alarms.remove(at: index)
DispatchQueue.main.async {
collectionView.deleteItems(at: [indexPath])
}
reloadCell()
break
}