2015-03-04 3 views
2

Кто-нибудь знает, как я могу показать UIProgressView, пока я сохраняю синхронно с parse.com?Индикатор выполнения в режиме синхронного сохранения на parse.com

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

Я начинаю думать, что синхронизация сохраняет всю силу от всего остального, а спасение async является лучшим для этой проблемы. Но в моем случае я должен сохранять синхронно, так как я показываю сохраненные данные непосредственно после его сохранения.

Кто-нибудь знает, как это можно сделать? «Синхронного» метода

self.startProgress() 
self.saveSynchronousToParse() 
self.stopProgress() 

ответ

3

A также известен как метод «блокирующего» - это эффективно блокирует текущий поток до тех пор, пока не будет завершено.

По умолчанию вашего приложение работает в основной очереди, и это очередь, который выполняет все задачи пользовательского интерфейса, поэтому, как только вы называете «saveSynchronousToParse» (который предположительно вызывает save или некоторую подобную синхронной функцию Синтаксической) ваш пользовательский интерфейс будет заморозить, пока задача не завершится. Вероятно, вы получите предупреждение в консоли о выполнении синхронной задачи в основном потоке.

В этом случае представление прогресса не имеет смысла, потому что вы не получаете никакой обратной связи от API-интерфейса Parse относительно того, насколько был достигнут прогресс в сохранении информации.

A UIActivityView имеет больше смысла. Вы можете использовать следующее, чтобы достичь того, что вы после использования

self.activityView.startAnimating() 

self.somePFObject.saveInBackgroundWithBlock { 
(success: Bool!, error: NSError!) -> Void in 
    dispatch_async(dispatch_get_main_queue(),{ 
     self.activityView.stopAnimating() 
    }); 
    if success { 
     println("success") 
    } else { 
     println("\(error)") 
    } 
} 
+0

Это хороший материал Paulw11. При таком сохранении я фактически не нуждаюсь в ActivityView. Раньше я спасал с SaveEventually(), который, как он утверждает, сохраняет в конечном итоге. Этого не делало, если для меня, так как я показываю сохраненные данные в следующем сегменте, и он не был сохранен после того, как вышел segue. Затем я использовал функцию Save(), которая является синхронной и занимает все время в мире. С другой стороны, ваш пример экономит так быстро, что нет необходимости в ActivityView. Спасибо чувак! – TommyF