Обновление индикатора выполнения во время цикла

У меня два контроллера. В первом у меня есть индикатор выполнения и есть запрос, который я получаю данные и цикл. Мне нужно обновить панель, которая находится на первом контроллере во время цикла. Проблема в том, что даже если цикл не обновляется, косая черта обновляется только после завершения выполнения метода.

FirstView:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
    for i in 0 ..< JSON.count {

        autoreleasepool{
            count = count + 1
            if count >= percentage {
                progress = progress + 1
                //This notification executes the method that makes the update in the first view
                NSNotificationCenter.defaultCenter().postNotificationName("ProgressNotification", object: nil, userInfo: ["label":"Clientes", "progress" : progress])
                count = 0
            }
        }

    }
}

SecondView:

// Метод, который обновит панель инструментов

func addProgress(notification:NSNotification){
    dispatch_async(dispatch_get_main_queue()) {
        self.progressBar.setProgress(CGFloat.init(notification.userInfo!["progress"] as! Int), animated: true)
        self.progressLabel.text = notification.userInfo!["label"] as? String
    }
}

1 ответ

  1. Я не уверен в вашем постоянном переключении потоков и обходе службы уведомлений. Тем не менее, вы должны установить свой прогресс в плавающем между 0.0 и 1.0.
    То, что вы делаете, заключается в том, что вы выполняете приведение значений int от 1 до JSON.отсчет для того чтобы плыть. Поэтому ваш прогресс vallue всегда 1.0 или больше.

    Лучше использовать что-то вроде .setProgress(CGFloat.init(JSON.count) / CGFloat.init(i)).

    Сделайте и то и другое, приведите свои Инты к плавающим и убедитесь, что divisio является плавающим делением, а не целочисленным делением. (целочисленные деления будут равны 0 или 1 или более, но отмечать между ними.)