UIActivityViewController показывает пустые параметры и не может взаимодействовать

Я внедрял новую функцию с кнопкой «Поделиться» в своем приложении. Обратите внимание, что ActivityViewController выглядит пустым. сначала я подумал, что элемент, который я дал для обмена, может быть нулевым, но когда я попытался поделиться простой строкой, она все еще отображается вот так, я пересмотрел свой старый рабочий код, и все они ведут себя так. Даже что-то такое простое, как это:

let activityViewController = UIActivityViewController(activityItems: ["test"], applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view
DispatchQueue.main.async {
    self.present(activityViewController, animated: true, completion: nil)
}

вот что я получил: Снимок экрана симулятора iPhone X Кто-нибудь знает, что вызывает это и как это исправить?

РЕДАКТИРОВАТЬ: протестировано с использованием фактического устройства, вызывающего проблемы, в моем выпущенном приложении обратная связь заключается в том, что оно не отображается пустым, оно отображается с параметрами, просто не взаимодействует, не может быть нажато и не может отклонить его, приложение просто «зависнет», и тогда пользователю придется убить приложение, чтобы использовать его повторно. После тестирования я все еще не уверен, что вызывает пробел, я отключил все свои расширения UIViewController (многие из них не автоматизированы и все равно нуждаются в функциях для вызова, поэтому я не думаю, что проблема в них), и когда я помещаю debugPrint в блок завершения настоящей функции, он даже не вызывается, поэтому инициализация контроллера представления активности не завершена?


person Mango Lord    schedule 18.04.2019    source источник
comment
Этого, вероятно, не произойдет на реальном устройстве. В вашем симуляторе нет приложений для отображения.   -  person Au Ris    schedule 18.04.2019
comment
Я тестирую его на своем реальном устройстве, он отображается вот так, а затем он сам вылетает примерно через 2 минуты с этим: Сообщение от отладчика: прекращено из-за проблемы с памятью   -  person Mango Lord    schedule 18.04.2019
comment
Виновника нашли. Пожалуйста, проверьте мой ответ.   -  person Au Ris    schedule 18.04.2019


Ответы (1)


Хорошо, наконец-то нашел виновника, кто-то подсказал мне, что я должен изучить расширение UIViewController, чтобы проверить, не переопределяю ли я что-то, ну, я этого не сделал, но я переопределил UILabel и UIButton's awakeFromNib и setNeedsDisplay, потому что мое приложение поддерживает несколько языков и поддержка изменения языка в приложении, и я хотел «автоматизировать» UILabel и UIButton для изменения языкового шрифта (потому что какой-то шрифт выглядит лучше), чтобы я мог избежать присоединения слушателя к контроллерам просмотра для изменения языкового шрифта, когда они изменяют язык в приложении .

override open func awakeFromNib() {
    super.awakeFromNib()
    if let prefLang = UserDefaults.languageCode{
        self.font = switchFontForLang(lang: prefLang)
    }
}

override open func setNeedsDisplay() {
    super.setNeedsDisplay()
    if let prefLang = UserDefaults.languageCode{
        self.font = switchFontForLang(lang: prefLang)
    }
}

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

person Mango Lord    schedule 22.04.2019