我正在尝试删除核心数据数据库中的所有数据,但它引发了错误并且完全没有影响SQLite数据库。
if self.userCredentials.count > 0 {
for loopIndex in 0 ... self.userCredentials.count - 1 {
self.context.delete(self.userCredentials[loopIndex])
self.userCredentials.remove(at: loopIndex)
}
self.saveLogin()
}
func saveLogin() {
do {
try context.save()
print ("Context saved successfully")
}
catch {
print ("Error saving items \(error)")
}
}
致命错误:索引超出范围
答案 0 :(得分:0)
将代码更改为:
for userCredential in userCredentials {
context.delete(userCredential)
}
saveLogin()
您的代码的问题是,您循环了变量userCredentials所保存的元素的时间。这是一个不变的值,将不会更改,并且会在循环一次之前对其进行初始化。
您正在基于索引访问数组的索引。没错,但是在简单的for-in(请参见上面的代码)就足够的情况下,不应这样做。
之后,您可以通过删除元素来操纵元素计数。这不会影响我上面所述的不可变元素计数。因此,迟早会有索引超出范围异常。您应该尝试搜索确切的内容,然后尝试访问列表中不存在的元素。