Блок в main.async выполняется только после завершения блока global.async. - PullRequest
0 голосов
/ 26 октября 2018

Я вызываю функцию из моей библиотеки, которая должна обновить некоторый пользовательский интерфейс в приложении:

DispatchQueue.global().async {
    autoreleasepool {
        print("is main thread =", Thread.isMainThread)
        for i in 0..<data.count {
            for j in 0..<data[i].createArray.count {
                let dataObject = NSEntityDescription.insertNewObject(forEntityName: entity, into: context)

                // Parse the dictionary of keys/values returned from the synced array into an easily readable JSON file.
                let parsedData = json(from: data[i].createArray[j])
                DispatchQueue.main.async {
                    label?.text = "Syncing " + String(describing: j + 1) + " " + entity + "s out of " + String(describing: data[i].createArray.count)
                    print("is main thread =", Thread.isMainThread)

                    print(label?.text)
                }
            }
        }
    }
}

Однако блок внутри вызова main.async выполняется только после прохождения остальной части функции. Как я могу изменить это, чтобы обновлять каждую итерацию цикла?

1 Ответ

0 голосов
/ 26 октября 2018

вместо

DispatchQueue.main.async {}

использовать

DispatchQueue.main.sync {}
...