Создать NSPersistentContainer без постоянных данных - PullRequest
2 голосов
/ 11 марта 2019

Я создаю 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
}()

Он загружает все данные / объекты, которые были сохранены.Можно ли создать NSPersistentContainer без каких-либо данных, но все еще содержит все объекты, которые я определил в MyUselessApp.xcdatamodeld?

Я хочу сделать это, потому что у меня есть UIViewController с NSFetchResultController, но каждый раз, когда будет отображаться UIViewController, данные должны обновляться (я ничего не могу кэшировать).Текущий способ, которым я делаю это, состоит в том, что я удаляю каждый объект, который NSPredicate вернет из NSFetchResultController.Это выглядит как бесполезный шаг для меня.Все мои таблицы, которые содержат динамические данные, используют NSFetchResultController, и я предпочитаю продолжать использовать его таким образом.

1 Ответ

0 голосов
/ 16 марта 2019

Оказывается, это было единственное, что мне нужно было сделать:

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
}()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...