Возможно, проблема в том, что вы запускаете несколько методов UIKit в фоновом потоке.Все взаимодействие с UIKit должно осуществляться в главном потоке, который обрабатывает весь ввод пользователя.
Я не знаком с используемым вами методом API-интерфейса Facebook, но похоже, что он работает с UIImage.Если вы можете заставить его работать с резервным CGImage или использовать другой метод, который не взаимодействует с какими-либо объектами UIKit, вы можете решить эту проблему.(Опять же, я не могу вам помочь, поскольку я не работал ни с одним API Facebook.) Кроме того, вам нужно вызвать метод UIActivityIndicatorView
stopAnimating
из основного потока.
Youможно настроить очереди примерно так:
dispatch_queue_t myQueue = dispatch_queue_create("anyName", NULL);
dispatch_async(myQueue, ^{
// upload image to Facebook, but without using UIKit methods
dispatch_async(dispatch_get_main_queue(), ^{
[uploadingIndicator stopAnimating];
});
});
dispatch_release(myQueue);
Таким образом, вы можете выполнять тяжелую работу в фоновом потоке и возвращаться в основной поток для вызова любых методов UIKit.
ИСПРАВЛЕНИЕ: UIImage, а также UIColor и UIFont, все являются исключениями объектов UIKit, с которыми можно безопасно взаимодействовать вне основного потока.Большая часть остальной части UIKit не является потокобезопасной, включая, конечно, UIImageView.(Я склонен путать UIImage и UIImageView поздно ночью.)