【问题标题】:Unable to delete all current elements of core data database无法删除核心数据数据库的所有当前元素
【发布时间】:2019-11-16 10:21:41
【问题描述】:

我正在尝试删除我的核心数据数据库中的所有数据,但它抛出了一个错误并且根本不影响 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)")
        }
    }

致命错误:索引超出范围

【问题讨论】:

    标签: arrays swift core-data


    【解决方案1】:

    将您的代码更改为:

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

    你的代码的问题是你循环变量 userCredentials 持有的元素的次数。这是一个不可变的值,它不会被改变,它甚至在循环一次之前就被初始化了。

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

    之后,您通过删除一个元素来操纵元素计数。这不会影响我上面所说的不可变元素计数。因此,迟早你会得到一个索引越界异常。您应该尝试搜索它到底是什么,尝试访问列表中不存在的元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 2017-03-20
      • 1970-01-01
      • 2017-08-12
      • 1970-01-01
      相关资源
      最近更新 更多