我有一个包含各种类文件的项目。我有一个条形码扫描仪,我从在线来源使用它输出警报控制器中的值。我想要做的是获取条形码值并将其传递回我的主类,并使用函数解析它并将其显示在相关标签中。出于某种原因,如果任何人有任何想法会很棒,我就无法做到这一点。我花了一整天的时间试图弄明白这一点,没有任何运气。
barcodeScanner类相关部分
/* AVCaptureMetadataOutputObjectsDelegate */
func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
if alertController != nil {
return
}
if metadataObjects != nil && metadataObjects.count > 0 {
if let machineReadableCode = metadataObjects[0] as? AVMetadataMachineReadableCodeObject {
// get the barcode string
let type = machineReadableCode.type
let barcode = machineReadableCode.stringValue
我需要将条形码上面的值放到passengerInformation类中,它将通过submitCodeAuto函数传递给标签。
passengerInformation().self.submitCodeAuto(barcode)
我对它的破解似乎不起作用..
// display the barcode in an alert
let title = "Barcode"
let message = "Type: \(type)\nBarcode: \(barcode)"
displayAlert(title, message: message)
}
}
}
}
乘客信息类
@IBOutlet weak var firstNameResponse: UILabel!
@IBOutlet weak var lastNameResponse: UILabel!
@IBAction func submitCodeAuto(sender: AnyObject!) {
firstNameResponse.text = barcodeProtocol(barcode).firstName
lastNameResponse.text = barcodeProtocol(barcode).lastName
}
在submitCodeAuto函数上方还通过另一个名为barcodeProtocol的函数发送传入的条形码,该函数将其格式化,允许检索名字和姓氏。
我目前使用barcodeProtocol运行文本字段值的按钮测试标签,并在标签中显示以便所有标签都正常工作。
我还连接了一个新的viewcontroller按钮,扫描仪类工作正常。显示相机扫描并显示值。
但我一直无法加入他们。该应用程序返回致命错误:在展开可选值时意外发现nil
任何帮助都会非常感谢。
答案 0 :(得分:1)
在你的功能中:
@IBAction func submitCodeAuto(sender: AnyObject!) {
firstNameResponse.text = barcodeProtocol(barcode).firstName
lastNameResponse.text = barcodeProtocol(barcode).lastName
}
你从哪里得到'条形码'?
尝试用
替换它@IBAction func submitCodeAuto(sender: AnyObject!) {
firstNameResponse.text = barcodeProtocol(sender as! String).firstName
lastNameResponse.text = barcodeProtocol(sender as! String).lastName
}
我假设您的方法barcodeProtocol接受任何字符串并完美地将其解析为firstname和lastname
答案 1 :(得分:-1)
您的代码充满了问题。
您可以从passengerInformation
代码创建barcodeScanner
类的新实例,调用submitCodeAuto()
方法,然后忘记新创建的passengerInformation
对象。 (大概它是一个视图控制器。)
创建新的视图控制器,向其发送消息然后忘记它是没有意义的。那不会做任何事情。您可能希望从故事板中实例化自定义passengerInformation
视图控制器,在视图控制器中设置barcode
字符串属性,然后使用presentViewController:animated:completion:
以模态方式呈现它。在passengerInformation
视图控制器的viewWillAppear方法中,您应该使用条形码属性,从中提取所需信息,然后将其安装到文本字段中。
即使您没有以这种方式使用,submitCodeAuto()
方法也会被声明为IBAction。它需要您忽略的参数sender
,而是使用您不会显示的变量barcode
。
您的submitCodeAuto()
函数可能应该使用String类型的参数barcode
,因为它似乎正在做什么。
你有几个班级的名字以小写字母开头。类名应以大写字母开头。