核心数据获取请求问题

Issue with Core Data fetch request

我是 iOS 开发的新手,我在获取核心数据请求时遇到了一些问题。我正在使用 Xcode 9-beta 和 swift 4.

每当我更新数据库时,我都会通过提取请求加载新数据,进行一些计算并填充 table 视图。

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

这是我的代码:

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是异步的,你更新数据后,还没有保存。

asynchronously performs the block on the context's queue. Encapsulates an autorelease pool and a call to 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()
        }
    }
}

希望对您有所帮助。