我正在尝试删除核心数据数据库中的所有数据,但它会引发错误,并且根本不影响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)")
}
}
致命错误:索引超出范围
将您的代码更改为:
for userCredential in userCredentials {
context.delete(userCredential)
}
saveLogin()
您的代码问题是您循环可变用户限制所包含的元素的次数。这是一个不变的值,它甚至不会在循环一次之前初始化。
您正在基于索引访问数组的索引。这不是错的,但是在简单的for-in(请参见上面的代码(的情况下不应该这样做。
之后,您通过删除元素来操纵元素计数。这不会影响我上面说的不变元素计数。因此,很快或以后您会出于异常而获得索引。您应该尝试搜索确切的内容,尝试访问不存在的列表中的元素。