Я продолжаю получать эту ошибку:
Thread 1: EXC_BREAKPOINT (code=1, subcode=0x18407cb5c)
всякий раз, когда я запускаю этот код:
import UIKit
import SQLite
class TakeMoney: UIViewController {
//for json
let json = "[{"+"\"UserID\":\""+"\(Int(stored_ID) ?? -1)\""+",\"Name\":"+"\"\(stored_name)\""+"}]"
//
var img : UIImage? = nil
//variable for image display space
@IBOutlet weak var ImageDisplay: UIImageView!
//variable for raw qr image output
var qrCodeImage : CIImage!
override func viewDidLoad() {
super.viewDidLoad()
print(json)
////takes out the input and encodes it
///runs on main thread
DispatchQueue.main.async{
let data = self.json.data(using: String.Encoding.isoLatin1, allowLossyConversion: false)
let filter = CIFilter(name: "CIQRCodeGenerator") //defining filter
filter?.setValue(data, forKey: "inputMessage") //utilising filter
filter?.setValue("L", forKey: "inputCorrectionLevel") //defining the level of quality, H is highest, L is lowest
self.qrCodeImage = filter?.outputImage //getting the filter to output raw image
//to set the size of qr code
let length = self.ImageDisplay.frame.size.width
let height = self.ImageDisplay.frame.size.height
let transformedImage = self.qrCodeImage.transformed(by: CGAffineTransform(scaleX: length, y: height))
//
self.img = UIImage(ciImage: transformedImage)
print(self.img!)
if (self.img == nil){
print("It is empty")
}
else{
self.ImageDisplay.image = self.img
}
}
}
}
Этот код должен принимать значение JSON и преобразовывать его в QR-код, который затем будет отображаться через элемент просмотра изображения ImageDisplay. Он работает, когда я запускаю его на симуляторе, но когда я запускаю его на своем телефоне, он не работает и всегда дает сбой, вызывая ранее указанную ошибку.
Он вылетает в точке, где ему нужно назначить UIImage для представления изображения, в строке:
self.ImageDisplay.image = self.img
@rmaddy о да .... забыл добавить это ... редактирую прямо сейчас
@JonathanLamptey Отправьте ответ, если вы когда-нибудь решали эту проблему.





Скорее всего, self.ImageDisplay равен нулю. Поскольку это неявно развернутый необязательный параметр, доступ к нему приведет к сбою, если он равен нулю.
Вам нужно убедиться, что он подключен к вашей раскадровке / xib.
Это не может быть проблемой. За несколько строк до строки, вызывающей сбой, указывается кадр ImageDisplay. И будет другое исключение (обычно EXC_BAD_INSTRUCTION).
Да, проблема не в этом, поскольку он уже подключен к раскадровке. Я проверил
Вы принудительно разворачиваете значение перед фактической проверкой нулевого значения в print(self.img!).
Вполне вероятно, что принудительное развертывание возвращает nil и, таким образом, приводит к сбою приложения.
Это не сработало, все равно вылетает на self.ImageDisplay.image = self.img
Было бы лучше, если бы вы сказали нам, какая именно линия вызывает сбой.