ios - 核心数据获取请求问题

标签 ios swift core-data nsfetchrequest

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

每当我更新数据库时,我都会通过获取请求加载新数据,进行一些计算并填充表格 View 。

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

这是我的代码:

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

关于ios - 核心数据获取请求问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46024981/

相关文章:

ios - 我如何通过日期进行搜索?

swift - 获取 SKSpriteNode 的位置

ios - 未调用 NSFectchedResultController 委托(delegate)?

ios - 使用 UIManagedDocument 保存核心数据时出错

iphone - NS无效参数异常 : Illegal attempt to establish a relationship between objects in different contexts

ios - 无法使用 iOS Estimote Indoor SDK 手动创建位置

ios - 如何让stackview在向下滚动时消失,向上滚动时重新出现?

swift - 具有通用功能和关联类型的协议(protocol)

ios - 跟踪操作队列中的操作

ios - AFURLSessionManager downloadTaskWithRequest 立即取消