iOS NSManagedObjectContext.mergeChanges заморозил основной поток - PullRequest
1 голос
/ 19 марта 2020
  1. Используйте NSFetchedResultsController в качестве источника данных для UITableView. Он создается с основным контекстом (persistentContainer.viewContext).
  2. Выполнение пакетного удаления с использованием фонового контекста
  3. Объединение изменений в главном контексте для обновления пользовательского интерфейса. ( В этом проблема. Замораживает основной поток ).

Вот коды:

let mainContext = persistentContainer.viewContext
let taskContext = persistentContainer.newBackgroundContext()
taskContext.perform {            
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "MyItem")
    fetchRequest.includesPropertyValues = false
    let batchDeleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
    batchDeleteRequest.resultType = .resultTypeObjectIDs
    do {
        let result = try taskContext.execute(batchDeleteRequest) as? NSBatchDeleteResult
        let objectIDArray = result?.result as? [NSManagedObjectID]
        let changes = [NSDeletedObjectsKey : objectIDArray]

        /****below line of codes is the problem, it blocks main thread****/ 
        NSManagedObjectContext.mergeChanges(fromRemoteContextSave: changes as [AnyHashable : Any], into: [mainContext])

    } catch {
        print("Error batch delete items: \(error.localizedDescription)")
    }
}

Есть ли способ избежать блокировать основной поток в этой ситуации? Пожалуйста помоги. Спасибо

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