Swift3 collectionView'尝试从第1部分删除第1项,但在更新之前只有1个部分'

时间:2017-02-03 10:02:48

标签: ios swift xcode uilocalnotification collectionview

我的应用由于尝试删除第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)
    }
}

1 个答案:

答案 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
}