Снимок «UIView» приводит к сбою приложения с помощью «NSInvalidArgumentException» «[_UIReplicantView _isSymbolImage]: нераспознанный селектор, отправленный экземпляру» - PullRequest
0 голосов
/ 26 марта 2020

Привет, ребята, я только что обновил XCode до версии 11.4 из магазина приложений, и когда я пытаюсь сделать снимок UIView на iOS 13.4, как это:

extension UIView {

    func snapshot(at scale: CGFloat) -> UIImage? {

        let renderer = UIGraphicsImageRenderer(size: bounds.size)
        let image = renderer.image { [weak self] context in
            self?.drawHierarchy(in: self?.bounds ?? .zero, afterScreenUpdates: true)
        }

        return image
    }
}

или вот так:

extension UIView {

    func snapshotOld(at scale: CGFloat) -> UIImage? {
        UIGraphicsBeginImageContextWithOptions(bounds.size, false, scale)
        guard let currentContext = UIGraphicsGetCurrentContext() else { return nil }
        layer.render(in: currentContext)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
    }
}

и установите результирующее изображение на UIImageView следующим образом:

class ViewController: UIViewController {

    @IBOutlet private weak var imageView: UIImageView!


    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        let image = view.snapshot
        imageView.image = image
    }
}

extension UIView {

    @objc var snapshot: UIImage? {
        snapshot(at: 3.0)
//        snapshotOld(at: 3.0)
    }
}

я получаю:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_UIReplicantView _isSymbolImage]: unrecognized selector sent to instance 0x115907c00'
*** First throw call stack:
(0x1ad52c164 0x1ad240c1c 0x1ad42a7e0 0x1b16a5b6c 0x1ad53085c 0x1ad532b60 0x1b1af6cdc 0x1b1af714c 0x1b1af0b30 0x1025061a8 0x102506270 0x1b1010880 0x1b10112cc 0x1b0f25658 0x1b167fc10 0x1b166f13c 0x1b16a088c 0x1ad4a6c54 0x1ad4a18e4 0x1ad4a1d84 0x1ad4a1660 0x1b78b2604 0x1b167615c 0x102507f78 0x1ad31d1ec)
libc++abi.dylib: terminating with uncaught exception of type NSException

Я получаю это как в симуляторе, так и на реальном устройство.

Ребята, вы понимаете, почему это происходит? Я подозреваю, что это ошибка XCode 11.4, потому что этот код прекрасно работал на старых версиях ?

Вот пример проекта, если вы хотите попробовать его на своей машине

1 Ответ

1 голос
/ 26 марта 2020

Вы не вызываете метод, которым вы себя считаете. У вас есть два варианта:

  • Изменить snapshot на snapshott везде (или другой однозначной альтернативе).

  • Или удалить @objc обозначение.

Сделайте что-нибудь из этого, и все будет хорошо.

...