Swift中生成Codabar条形码失败求助:报「No code generator selected」错误
解决RSBarcodes_Swift生成Codabar条码时「No code generator selected」错误
你在使用RSBarcodes_Swift生成Codabar条码时遇到「No code generator selected」错误,当前代码依赖RSUnifiedCodeGenerator尝试生成条码但始终失败。
问题原因
RSUnifiedCodeGenerator的generateCode(_:machineReadableCodeObjectType:)方法没有正确将AVMetadataObject.ObjectType.codabar映射到对应的RSCodaBarGenerator,导致无法匹配到合适的条码生成器。
解决方案
方案1:直接使用RSCodaBarGenerator(推荐)
绕过统一生成器的类型映射问题,直接使用Codabar专属生成器:
func generateBarcode(contents: String) { // 校验Codabar格式:必须以A/B/C/D作为起始和终止符 let validStartEndChars = ["A", "B", "C", "D"] guard let firstChar = contents.first.map(String.init), validStartEndChars.contains(firstChar), let lastChar = contents.last.map(String.init), validStartEndChars.contains(lastChar) else { DispatchQueue.main.async { self.barcodeImage = Image(systemName: "xmark.circle") } print("Codabar内容不符合规范:需以A/B/C/D开头和结尾") return } let generator = RSCodaBarGenerator() generator.fillColor = UIColor.white generator.strokeColor = UIColor.black if let uiImage = generator.generateCode(contents) { DispatchQueue.main.async { self.barcodeImage = Image(uiImage: uiImage) } } else { DispatchQueue.main.async { self.barcodeImage = Image(systemName: "xmark.circle") } print("Codabar条码生成失败") } }
方案2:修复统一生成器的类型映射(可选)
若坚持使用RSUnifiedCodeGenerator,可尝试直接使用"CodaBar"作为类型参数(部分版本的RSBarcodes_Swift使用该字符串而非AVMetadata的rawValue):
if let uiImage = gen.generateCode("A00031326002A", machineReadableCodeObjectType: "CodaBar") { DispatchQueue.main.async { self.barcodeImage = Image(uiImage: uiImage) } } else { DispatchQueue.main.async { self.barcodeImage = Image(systemName: "xmark.circle") } }
关键注意事项
- Codabar条码必须以A/B/C/D作为起始和终止符,否则生成器会直接失败
- 移除代码中不必要的iOS 15.4版本判断,RSBarcodes_Swift的Codabar生成是库自身实现,不依赖系统版本
内容的提问来源于stack exchange,提问作者Boaztheostrich
相关产品推荐
相关产品推荐

