2016-05-27 105 views
0

我有一个包含各种类文件的项目。我有一个条形码扫描器,我使用的是一个在线源,它在警报控制器中输出值。我想要做的是获取条形码值并将其传递回我的主类,并使用函数解析它并将其显示在相关标签中。出于某种原因,如果任何人有任何想法都会很棒,我无法做到这一点。我花了整整一天的时间试图找出这没有任何运气。在swift中传递类/视图控制器之间的let值

/* 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功能传递到写标签条形码让利值

barcodeScanner类相关章节。

  passengerInformation().self.submitCodeAuto(barcode) 

我在它上面的裂纹这似乎并没有工作..

  // display the barcode in an alert 
      let title = "Barcode" 
      let message = "Type: \(type)\nBarcode: \(barcode)" 
      displayAlert(title, message: message) 
     } 

    } 
} 

} 

passengerInformation类

@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运行一个文本框值来测试标签,并在标签中显示所有工作。

我也将一个按钮连接到一个新的视图控制器与扫描仪类工作正常。显示相机扫描并显示值。

但我只是无法加入他们。该应用程序正在返回致命错误:意外地发现无解包装可选值

任何帮助将是非常感谢。

+1

您是否在搜索错误消息'致命错误:意外地发现零,而解包可选值?你看过Xcode中指出的问题行吗?你尝试过哪些调试?在StackOverflow上有很多类似的问题。例如:http://stackoverflow.com/q/32170456/558933 –

回答

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发生在任何字符串替换它,并完美地将其解析为名字和姓氏

-1

你的代码是千疮百孔。

您从barcodeScanner代码创建passengerInformation类的新实例,调用submitCodeAuto()方法,然后忘记新创建的passengerInformation对象。 (大概它是一个视图控制器。)

创建一个新的视图控制器,发送消息,然后忘记它没有任何意义。那什么都不会做。您可能想要从故事板实例化您的自定义passengerInformation视图控制器,在视图控制器中设置barcode字符串属性,然后使用presentViewController:animated:completion:以模态方式呈现它。在您的passengerInformation视图控制器的viewWillAppear方法中,您应该使用条形码属性,从中提取所需的信息,并将其安装到文本字段中。

您的submitCodeAuto()方法被声明为IBAction,即使您没有这样使用它。它取决于您忽略的参数sender,而是使用您不显示的变量barcode

您的submitCodeAuto()函数可能应该使用String类型的参数barcode,因为这正是它所做的。

你有几个班级的名字以小写字母开头。类名应以大写字母开头。

相关问题