Как синхронизировать потоки основного и фонового базовых данных? - PullRequest
0 голосов
/ 11 мая 2019

Я сохраняю данные в свои базовые данные в фоновом потоке:

class CoreDataHelper: NSObject {
    static let sharedInstance = CoreDataHelper()

    private func managedObjectContext() -> NSManagedObjectContext {
        return (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    }

    func saveNewFood(foodName: String) {
        let context = managedObjectContext()
        let privateContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)

        privateContext.persistentStoreCoordinator = context.persistentStoreCoordinator
        privateContext.perform {
            let food = Food(context: context)

            food.name = foodName
            food.isInTheFridgeNow = true

            do {
                try context.save()
            } catch let error {
                print(error.localizedDescription)
            }
        }
    }
}

И у меня есть функция, которая извлекает данные в главном потоке:

func fetchFoodsThatsInTheFridgeNow() -> [Food] {
    let fetchRequest: NSFetchRequest<Food> = Food.fetchRequest()
    let sortDescriptor = NSSortDescriptor(key: "name", ascending: true)
    var foods: [Food] = []

    fetchRequest.predicate = NSPredicate(format: "isInTheFridgeNow == YES")
    fetchRequest.sortDescriptors = [sortDescriptor]

    do {
        foods = try managedObjectContext().fetch(fetchRequest)
    } catch let error {
        print(error.localizedDescription)
    }

    return foods
}

После сохранения новой еды я хочунемедленно увидеть список новых продуктов в моем ВК (не закрывая мое приложение и не запуская его снова).Как это реализовать?

1 Ответ

0 голосов
/ 11 мая 2019

Вы можете наблюдать уведомление ContextWillSave, и тогда у вас есть доступ к недавно обновленным, вставленным и удаленным объектам из любого класса. https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CoreData/ChangeManagement.html

...