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()
现在一切正常。感谢支持
我有一个包含 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()
现在一切正常。感谢支持