繁体   English   中英

核心数据提取请求出现问题

[英]Issue with Core Data fetch request

我对iOS开发还很陌生,但是Core Data fetch请求存在一些问题。 我正在使用Xcode 9-beta和Swift 4。

每当我更新数据库时,我都会使用获取请求来加载新数据,以进行一些计算并填充一个表格视图。

我面临的挑战是,每当我对实体进行获取请求时,即使数据发生了变化,我也会获得相同的数据。 在我看来,这是在重用以前的提取请求中的数据,因为如果我关闭应用程序并再次打开它,它会向我显示新存储的数据。

这是我的代码:

if let context = container?.viewContext {
        context.perform {

            let request: NSFetchRequest<EntityName> = EntityName.fetchRequest()
            let data = try? context.fetch(request)
            self.data = data!

            self.setUI()
        }
}

我从以下位置获取容器:

let container: NSPersistentContainer? = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer

我给出了一些通用名称,因为我认为这与问题无关。

有什么想法吗?

谢谢,JL

如果您没有任何错误。 也许是因为更改后您没有保存上下文

确定要这样做吗?

此方法可帮助您在更改后立即保存上下文

  private func saveContext() {
    guard managedObjectContext.hasChanges else {
      return
    }
    do {
      try managedObjectContext.save()
    } catch {
      abort()
    }
  }

尝试在AppDelegate找到它

更新:

也可能是因为.perform是异步的,并且在您更新数据后,它尚未保存。

异步执行上下文队列中的块。 封装自动释放池和对processPendingChanges的调用

我从容器中获取了viewContext,因为我需要UI线程。 我想那是我的问题。 我通过传递用于获取和创建数据并将请求分派到主队列的上下文来解决它:

func loadData(with context: NSManagedObjectContext) {

    context.perform {

        DispatchQueue.main.async {
            let request: NSFetchRequest<EntityName> = EntityName.fetchRequest()
            let data = try? context.fetch(request)
            self.data = data!

            self.setUI()
        }
    }
}

希望对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM