2013-10-13 4 views
0

Я хочу использовать MBProgressHUD для информирования пользователя о обработке данных из массива. У меня есть массив с N элементами, и для каждого элемента я должен его обрабатывать (что подразумевает некоторое время), поэтому я хотел бы сообщить пользователю о ходе выполнения (x% завершено)MBProgressHUD при обработке данных из массива

У меня есть метод, который процесс этот массив (ProcessData:() данные NSArray *) Перебор каждый элемент массива

Я попытался установить HUD подробно текстовую метку до 0% до вызова ProcessData: (NSArray *) данные, а затем вызвать этот метод и обновить хад на каждой итерации, но hud не обновляется (я думаю, что это связано с тем, что я выполняю метод в основном потоке ...)

Есть способ сделать это? Я должен выполнить processData: (NSArray *) данные в фоновом режиме? Если это решение, как я могу это сделать?

Большое спасибо

+0

ума обмен кода ?? –

+0

вы должны обновить его из основного потока. Любая активность пользовательского интерфейса всегда должна идти в основном потоке –

+0

, вы, вероятно, не используете MBProgressHUd правильным способом. –

ответ

0

Чтобы сохранить приложение отзывчивым вы должны выполнить любой длинный код работает в отдельном потоке. Чтобы сделать это, просто переместить всю логику методы processData внутри блока, как это:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    /// The code here will be executed in a background thread 
}); 

И для обновления пользовательского интерфейса, вы должны убедиться в том, чтобы сделать соответствующие вызовы из основного потока пользовательского интерфейса. Итак, теперь вы можете выполнить правильный код внутри другого блока, который будет выполняться в основном потоке, как это:

dispatch_async(dispatch_get_main_queue(), ^{ 
    /// The code here will be executed in main UI thread 
}); 
Смежные вопросы