iOS - Как понять и правильно отладить этот тип сбоя: com.apple.root.background-qos? - PullRequest
0 голосов
/ 15 апреля 2019

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

Вот мой отчет о сбое:

enter image description here

Этот вопрос и особенно комментарии помогли мне понять (вроде) мою проблему.

Похоже из вашего журнала сбоев com.apple.root.background-qos, это запрос потока, который может быть перефразирован из-за того, что он существует, так как не может больше принимать запрос.

Если я правильно понимаю, возможно, что потоки, обрабатывающие запросы, не смогут обрабатывать больше запросов?

Как мне отладить и проверить это? Я не могу воспроизвести аварию.

NB: В моей службе запуска я выполняю 5 или 6 запросов, каждый из которых разделен в dispatchGroup.enter / .leave, когда закончено, например:

dispatchGroup.enter()
self.fetchObservationForecast(lat: lat, lon: lon) { result in
     switch result {
     case .success(let observationForecast) :
          print("Observation Forecast request succeeded")
          model["observationForecast"] = observationForecast
          break
     case .failure(let error) :
          print("Observation Forecast request failed : \(error)")
          model["observationForecast"] = error
          break
     }
     dispatchGroup.leave()
}

Я смотрю не на то место? Как я могу проверить и воспроизвести его, чтобы отправить исправление?

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 15 апреля 2019

Сбой происходит из-за замыканий в указанных методах LauncherService.Трассировка указывает на то, что вы отказываетесь при установке значения словаря.

PartialStackTrace

Изменяемые словари Swift не являются поточно-ориентированными, и этот факт вместе сИндикатор background.qos заставляет меня думать, что вы читаете / пишете словарь в нескольких потоках.

Это, вероятно, что-то вроде приведенного ниже кода model["observationForecast"] =.

dispatchGroup.enter()
self.fetchObservationForecast(lat: lat, lon: lon) { result in
     switch result {
     case .success(let observationForecast) :
          print("Observation Forecast request succeeded")
          model["observationForecast"] = observationForecast
          break
     case .failure(let error) :
          print("Observation Forecast request failed : \(error)")
          model["observationForecast"] = error
          break
     }
     dispatchGroup.leave()
}
...