无法删除核心数据数据库的所有当前元素

时间:2019-07-05 20:24:11

标签: arrays swift core-data

我正在尝试删除核心数据数据库中的所有数据,但它引发了错误并且完全没有影响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)")
        }
    }

致命错误:索引超出范围

1 个答案:

答案 0 :(得分:0)

将代码更改为:

for userCredential in userCredentials {
    context.delete(userCredential)
}

saveLogin()

您的代码的问题是,您循环了变量userCredentials所保存的元素的时间。这是一个不变的值,将不会更改,并且会在循环一次之前对其进行初始化。

您正在基于索引访问数组的索引。没错,但是在简单的for-in(请参见上面的代码)就足够的情况下,不应这样做。

之后,您可以通过删除元素来操纵元素计数。这不会影响我上面所述的不可变元素计数。因此,迟早会有索引超出范围异常。您应该尝试搜索确切的内容,然后尝试访问列表中不存在的元素。