【发布时间】:2020-01-16 00:28:47
【问题描述】:
我在使用 AVFoundation 创建一个 UIView 的程序中遇到了一个非常间歇性的崩溃,该 UIView 包含来自传入字符串的二维码。它不会经常发生,但随着我的 TestFlight 用户使用该应用程序的时间而发生。
这是来自 Xcode 9 组织者的崩溃日志。
我创建了一个协议和扩展来处理 QRCode 的创建并将其放入 UIView。我的 UITableViewCell 符合 QRCodeImageProtocol
protocol QRCodeImageProtocol : class {
func generateQRCode(from string: String, forImageViewSize imageViewSize: CGSize) -> UIImage?
}
extension QRCodeImageProtocol {
func generateQRCode(from string: String, forImageViewSize imageViewSize: CGSize) -> UIImage? {
let generatorKey = "CIQRCodeGenerator"
let inputMessageKey = "inputMessage"
let inputCorrectionLevelKey = "inputCorrectionLevel"
let qrCodeCorrectionLevel: String = "M"
if let data = string.data(using: .isoLatin1),
let filter = CIFilter(name: generatorKey, withInputParameters: [inputMessageKey : data, inputCorrectionLevelKey : qrCodeCorrectionLevel]),
let qrCodeImage = filter.outputImage {
let x = imageViewSize.width / qrCodeImage.extent.size.width
let y = imageViewSize.height / qrCodeImage.extent.size.height
let transform = CGAffineTransform(scaleX: x, y: y)
let output = qrCodeImage.transformed(by: transform)
return UIImage(ciImage: output)
} else {
return nil
}
}
然后在我的 UITableViewCell 中,我监视用于创建 QR 码的字符串并调用协议函数以在字符串值更改时返回图像,最后我将 UIImageView 的视图设置为该 QRCode 图像。
@IBOutlet weak var qrCodeImageView: UIImageView!
var recordName: String? {
didSet {
if let qrString = recordName {
qrCodeImageView.image = generateQRCode(from: qrString, forImageViewSize: qrCodeImageView.frame.size)
}
}
}
这在 99% 的情况下都有效,但是在运行应用程序一天左右后,崩溃日志报告器中没有任何崩溃返回给我 - 我遇到了崩溃,然后是另一个,然后是另一个间隔小时或一天,或者相隔几天。
谁能建议我可能做错了什么?这是 Xcode 9 Swift 4.x 非测试版。测试人员正在运行 iOS 11.2.6。
【问题讨论】:
标签: ios swift avfoundation crash-reports core-image