在persistentContainer中删除已加载的persistentStore

时间:2017-01-20 01:24:03

标签: ios swift core-data nspersistentstore

我使用以下内容在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文档中找到与container.unloadPersistentStores(....)

等同的persistentContainer

我是Swift编程的noobie,任何想法都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

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

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