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

创建没有任何数据的NSPersistentContainer

  •  -1
  • J. Doe  · 技术社区  · 7 年前

    我创造了一个 NSPersistentContainer 这样地:

    static let persistentContainer: NSPersistentContainer =  {
        let container = NSPersistentContainer(name: "MyUselessApp")
    
        container.loadPersistentStores(completionHandler: { (nsPersistentStoreDescription, error) in
            guard let error = error else {
                // Everything went well
                return
            }
    
            fatalError(error.localizedDescription)
        })
    
        return container
    }()
    

    它加载保存的所有数据/对象。有没有可能创建一个 NSpersistent容器 没有任何数据,但仍然保存我在中定义的所有实体 MyUselessApp.xcdatamodeld ?

    我想这么做是因为我有 UIViewController 用一个 NSFetchResultController 但每次 UIViewController 将显示,数据需要刷新(我无法缓存任何内容)。我目前的做法是删除 NSPredicate 将从 NSFetchResultController 我觉得那一步没用。我所有包含动态数据的表视图都使用NSFetchResultController,我更愿意继续这样使用它。

    0 回复  |  直到 7 年前
        1
  •  0
  •   J. Doe    7 年前

    事实证明这是我唯一需要做的事情:

    let persistentContainer: NSPersistentContainer = {
        let container = NSPersistentContainer(name: "InMemoryCoreDataContainer")
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        })
        return container
    }()
    
    lazy var mockPersistantContainer: NSPersistentContainer = {
        let container = NSPersistentContainer(name: "InMemoryCoreDataContainer", managedObjectModel: persistentContainer.managedObjectModel)
        let description = NSPersistentStoreDescription()
    
        description.type = NSInMemoryStoreType
        description.shouldAddStoreAsynchronously = false // Make it simpler in test env
    
        container.persistentStoreDescriptions = [description]
    
        container.loadPersistentStores { (description, error) in
            precondition( description.type == NSInMemoryStoreType )
    
            if let error = error {
                fatalError("Create an in-mem coordinator failed \(error)")
            }
        }
        return container
    }()