Swift - 添加到 CoreData 的意外行

Swift - Unexpected rows added to CoreData

我有一个包含 6 行的 CoreData 库。

我naViewController,数据显示在一个UITable中,当我select一行在table时,didSelectRow 列出 6 行。这就是所有的行。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    
    caches = CoreData.getCaches()
    print ("Amount \(caches.count)") // gives 6

    performSegue(withIdentifier: "Select", sender: nil)
}

当执行 Segue 时,执行 prepareForSegue。现在,相同命令的结果值为 7.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    caches = CoreData.getCaches()
    print ("Amount \(caches.count)") // gives 7
}

我怀疑后台发生了某些事情,但我无法查明是什么。 下面是静态方法供参考:

static func getCaches() -> [Caches] {

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    
    var resultArray: [Caches] = []

    let request = NSFetchRequest<Caches>(entityName: "Caches")
    request.returnsObjectsAsFaults = false

    let sortDescriptor = NSSortDescriptor(key: "name", ascending: true)
    let sortDescriptors = [sortDescriptor]
    request.sortDescriptors = sortDescriptors

    do {
        resultArray = try context.fetch(request)
    } catch {
        print("Error - \(error)")
    }
    return resultArray
}

经过大量搜索,我找到了。

我执行了一个 performSegueWithIdentifier。其中在调用 ViewController 中调用了 prepareForSegue。但显然在此之前,创建了被调用的 VC 中的 variables/properties 。 (如果你考虑一下,这是合乎逻辑的)

在调用的VC中,使用以下代码初始化了一个变量 (从网上某处抄来的)

var cache = Caches((context: (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext))

这行颂歌引起了麻烦。因为它在 persistentContainer 中创建了一个实体(没有写入实际的 CoreData)。我用一个普通的旧的替换了它:

var cache = Caches()

现在一切正常。感谢支持