4

我已经使用以下内容在 persistentContainer 中加载了一个特定的 URL 文件:

// MARK: Core Data Stack

lazy var persistentContainer: NSPersistentContainer = {
  os_log("In persistent Container", log: OSLog.default, type: .debug)

  // set URL to game file location
  let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
  let docURL = urls[urls.endIndex-1]
  let storeURL = docURL.appendingPathComponent(Singleton.sharedInstance.mainGameFileName!)

  let container = NSPersistentContainer(name: "RefGameData")
  container.persistentStoreDescriptions = [NSPersistentStoreDescription(url: storeURL)]
  container.loadPersistentStores(completionHandler: { (storeDescription, error) in
    if let error = error as NSError? {
      fatalError("Unresolved error \(error), \(error.userInfo)")
    }
  })

  return container
}()

当我需要加载不同的游戏数据时,我想删除那个特定的 URL 文件并用不同的文件替换它。我无法在 Apple 文档中找到 persistentContainer 的任何等效项container.unloadPersistentStores(....)

我是 Swift 编程的菜鸟,任何想法都将不胜感激。

4

1 回答 1

4

为此,您需要使用持久存储协调器。NSPersistentContainer有一个名为 的属性persistentStoreController,并且一个名为 的方法remove,它可以满足您的要求。

请记住,如果您删除一个持久存储,您必须绝对确定您的内存中没有任何从该存储加载的托管对象。如果您尝试使用它们,它们将不再有用,并且可能会使应用程序崩溃。

于 2017-01-20T21:29:19.007 回答