Приложение выходит из строя при удалении пользовательского интерфейса из суперпредставления, когда приложение быстро перIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Приложение выходит из строя при удалении пользовательского интерфейса из суперпредставления, когда приложение быстро пер

Сообщение Anonymous »

У меня есть IBOutlet для UIView в моем приложении iOS Swift, и я установил его фрейм в viewDidLoad. когда приложение переходит в фоновый режим, мы делаем снимок gmsmapview и устанавливаем его в uiview. Однако когда приложение переходит из фонового режима в передний план, представление удаляется из суперпредставления, что приводит к сбою приложения. Сбой происходит именно тогда, когда представление удаляется. Я убедился, что IBOutlet правильно подключен и что никакая другая часть кода явно не удаляет представление из его суперпредставления. Как я могу предотвратить удаление представления или справиться с этой ситуацией, чтобы избежать сбоя? Эта проблема возникает только в сборке выпуска. В отладочной сборке все работает так, как ожидалось. Я делюсь разделом кода, в котором возникает проблема.

Код: Выделить всё

  @IBOutlet weak var mapViewSnapShot: UIView!

NotificationCenter.default.addObserver(self, selector: #selector(MapViewController.appDidEnterBackground), name: NSNotification.Name(rawValue: "SetSnapShot"), object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(MapViewController.appWillEnterForeground), name: NSNotification.Name(rawValue: "RemoveSnapShot"), object: nil)

override func viewDidLoad() {
super.viewDidLoad()

mapViewSnapShot.frame = CGRect(x: 0, y: 0, width: self.view.frame.width , height:     self.view.frame.height)
}

@objc func appDidEnterBackground() {

setForegroundLoader()
}

@objc func appWillEnterForeground() {
setMapCamera()
}

@objc func setForegroundLoader() {

mapViewSnapShot = mapView.snapshotView(afterScreenUpdates: true)
self.view.addSubview(mapViewSnapShot)
self.view.bringSubviewToFront(mapViewSnapShot)

}

@objc func setMapCamera() {

DispatchQueue.main.asyncAfter(deadline: .now() + 0.7) { [weak self] in
guard let self = self else { return }
if self.mapViewSnapShot.isDescendant(of: self.view) {
self.mapViewSnapShot.removeFromSuperview()
}

locationManager.startUpdatingLocation()
}
Я делюсь отчетом о сбое ниже.
Изображение


Подробнее здесь: https://stackoverflow.com/questions/786 ... es-from-ba
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»