【问题标题】:Deleting data from Core Data table prior to api call not working in swift在 api 调用之前从核心数据表中删除数据不能在 swift 中工作
【发布时间】:2015-01-06 18:21:01
【问题描述】:

我正在使用 Swift 从我的 viewDidLoad 函数中的 API 调用填充核心数据。我的问题是每次访问页面都会再次调用服务并导致重复数据。

我尝试在检索 API 结果之前清除 Core Data 数据库,但我的代码不起作用。

所以...

  1. 在调用 API 之前清除表格是最好的方法吗?
  2. 你能告诉我一种清除有效数据的方法吗,我发现的样本没有任何作用。

这是我删除核心数据db的代码:

var managedObjectContext: NSManagedObjectContext!
let request = NSFetchRequest(entityName: "Job")
var mylist = managedObjectContext.executeFetchRequest(request, error: nil)
mylist?.removeAll(keepCapacity: false)
managedObjectContext.save(nil)

谢谢...

【问题讨论】:

  • 删除 Core Data 中每条记录的最佳方法是删除数据库文件并创建一个新文件。
  • 这不会降低性能,在每次访问页面时删除和重新创建数据库吗?
  • 删除单个文件比删除数据库中的 10 个对象要快。而且无论如何您都必须重新插入所有对象,因此该部分的性能没有差异。
  • 显然,如果您在数据库中还有其他内容,则不是一种选择,但您可以将它们拆分到一个单独的数据库中。

标签: ios swift


【解决方案1】:

目前,您只是将它们从返回的数组中删除。您需要从 Core Data 中删除数组中的每个项目。

...
for item: AnyObject in mylist {
   managedObjectContext.deleteObject(item as NSManagedObject)
}
managedObjectContext.save(nil)

【讨论】:

  • 哦,我还以为 removeall 就是这么做的?
  • executeFetchRequest 返回与获取请求匹配的实体项目数组。 removeAll 是 Array 的一种方法,而不是 Core Data 的任何部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 1970-01-01
  • 2016-01-23
  • 2017-02-16
相关资源
最近更新 更多