Падение базовых поколений запросов при попытке установить QueryGenerationFrom - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь использовать генератор запросов в моих основных данных. Мой основной набор данных выглядит так:

var managedObjectModel: NSManagedObjectModel = {

    let bundle = Bundle.main
    let modelURL = bundle.url(forResource: modelName, withExtension:"momd")!
    return NSManagedObjectModel(contentsOf: modelURL)!

}()

// Creating a persistance Store Co-Ordinator
lazy var coordinator: NSPersistentStoreCoordinator = {

    let coordinator = NSPersistentStoreCoordinator(managedObjectModel:self.managedObjectModel)
    let documentsURL = self.applicationDocumentsDirectory
    let storeURL = documentsURL.appendingPathComponent("Avysh")

    do {
        let options =
            [NSMigratePersistentStoresAutomaticallyOption: true,
             NSInferMappingModelAutomaticallyOption: true]
        var error: NSError? = nil
        try coordinator.addPersistentStore(ofType: NSSQLiteStoreType,
                                           configurationName: nil,
                                           at: storeURL,
                                           options: options
        )
    } catch {
        print("Error adding persistent store: \(error)")
    }

    return coordinator
}()


// Parent Context Connected to store co-ordinator
lazy var savingModelcontext:NSManagedObjectContext = {
    var managedObjectContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
    managedObjectContext.persistentStoreCoordinator = self.coordinator

    return managedObjectContext
}()

Затем, когда мне нужны данные, я создаю временный контекст с сохранениемModelContext в качестве родительского.

func getForYou(completionHandler: @escaping ([ForYouObject], Error?) -> Void) {
        let getForYouQueue = DispatchQueue.global(qos: .userInteractive);
        getForYouQueue.async {
// Trying to set up query generation here
            let temporaryContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
            temporaryContext.parent = self.savingModelcontext
            do{
                try temporaryContext.setQueryGenerationFrom(NSQueryGenerationToken.current);
                let forYouService = ForYouService(context: temporaryContext);
//This calls the Fetch Request
                let forYouList = forYouService.getAllForYouSorted();
                var forYouObjectList: [ForYouObject] = []
                completionHandler(forYouObjectList, nil);
            }catch let err{
                print("Error in setQuery Generation \(err.localizedDescription)")
                completionHandler([], err);
            }
        }
    }

Приложение падает с Uncaught Exception NSExceptionName(_rawValue: NSInternalInconsistencyException) With Reason Child contexts inherit parent context generations and may not have their own and [:]

Когда я добавляю точку останова для исключения, Apllication останавливается на try temporaryContext.setQueryGenerationFrom(NSQueryGenerationToken.current);

Я не уверен, что я делаю неправильно при настройке основных данных

Любая помощь приветствуется. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...