Я только что добавил этот код на мой частичный вид и решил проблему, хотя и не очень чистую, она работает. Вы должны убедиться, что идентификаторы объектов, которые вы просматриваете.
$ (document) .ready (function () {$ ("# Profile_ProfileID"). Selectmenu ({icons: {button: 'ui-icon -circle-arrow-s '}}); $ ("# TitleID_FK"). selectmenu ({icons: {button:' ui-icon-circle-arrow-s '}}); $ ("# CityID_FK"). selectmenu ({icons: {button: 'ui-icon-circle-arrow-s'}}); $ ("# GenderID_FK"). selectmenu ({icons: {button: 'ui-icon-circle-arrow-s' }}); $ ("# PackageID_FK"). Selectmenu ({icons: {button: 'ui-icon-circle-arrow-s'}});});Вы должны использовать группы отправки, вводя группу перед выдачей запроса и оставляя группу в обработчике завершения запроса. Итак, давайте предположим, что на секунду у вас был какой-то метод, который выполнял асинхронный запрос, но предоставил параметр обработчика завершения, который был бы закрыт, который будет вызываться при выполнении сетевого запроса:
func perform(request: URLRequest, completionHandler: @escaping () -> Void) { ... }
Чтобы запустить эти два одновременных запроса и получить уведомление, когда они будут выполнены, вы сделаете что-то вроде:
let group = DispatchGroup()
group.enter()
perform(request: first) {
group.leave()
}
group.enter()
perform(request: second) {
group.leave()
}
group.notify(queue: .main) {
print("both done")
}
. Очевидно, что ваша реализация perform(request:)
может значительно различаться (например, у вас может быть закрытие передает данные назад), но шаблон тот же, независимо от того, записываете ли вы свой собственный сетевой код с помощью URLSession
или с помощью Alamofire. Просто используйте группы GCD, входящие в группу при создании запросов и оставляя группу в обработчике завершения асинхронного запроса.
Источник: Как написать dispatch_after GCD в Swift 3? Для этого вы можете использовать dispatch_group
. Например (код ObjC):
dispatch_group_t group = dispatch_group_create();
//startOperation1
dispatch_group_enter(group);
//finishOpeartion1
dispatch_group_leave(group);
//startOperation2
dispatch_group_enter(group);
//finishOpeartion2
dispatch_group_leave(group);
//Handle both operations completion
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
//code here
});
enter
были сбалансированы с соответствующими вызовамиleave
. Таким образом, только после того, как все вызовыleave
будут получены, будет вызываться блок группы отправкиnotify
. – Rob 16 September 2016 в 18:28notify
находится в конце, и в этот момент было два вызоваenter
, и поэтому группа не выдастnotify
, пока не будет дваleave
. Эта картина прочная. Просто убедитесь, что вы не вызываетеnotify
до тех пор, пока вы не вызвали все необходимые требованияenter
: если вы это сделаете, он не будет выполнять блокnotify
до тех пор, пока все соответствующиеleave
вызовы не будут выполнены , – Rob 16 September 2016 в 22:12