代码之家  ›  专栏  ›  技术社区  ›  JL.

核心数据获取请求问题

  •  1
  • JL.  · 技术社区  · 7 年前

    我对iOS开发非常陌生,我在核心数据获取请求方面遇到了一些问题。我使用的是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公司

    2 回复  |  直到 7 年前
        1
  •  0
  •   Yerken    7 年前

    你确定是你干的吗?

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

    试着在 AppDelegate

    更新:

    .perform 是异步的,在更新数据后,它还没有保存。

    封装自动释放池和对processPendingChanges的调用

        2
  •  0
  •   JL.    7 年前

    我从容器中获得了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()
            }
        }
    }