2016-05-27 3 views
0

У меня есть проект с различными файлами классов. У меня есть сканер штрих-кода, который я использовал из онлайн-источника, который выводит значения в контроллере предупреждения. То, что я хотел бы сделать, это взять значение штрих-кода и передать его обратно в мой основной класс и использовать функцию для его анализа и отображения в соответствующих ярлыках. По какой-то причине я не могу заставить это сделать, если у кого-то есть идеи, которые были бы замечательными. Я весь день пытался понять это без везения.Передача значения let между классами/viewcontrollers в swift

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) 
     } 

    } 
} 

} 

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

Вы выполнили поиск в сообщении об ошибке «Неустранимая ошибка: неожиданно найден nil при развертывании необязательного значения»? Вы посмотрели на проблемную строку, указанную в 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 принимает в любой строке и отлично разбирает его в ПгвЬЫат и LastName

-1

Вашего код пронизан проблемами.

Вы можете создать новый экземпляр вашего passengerInformation класса с вашего barcodeScanner кода, вызовите метод submitCodeAuto(), а затем забыть о вновь созданной passengerInformation объекта. (предположительно это контроллер вида.)

Нет смысла создавать новый контроллер просмотра, отправлять ему сообщение, а затем забывать об этом. Это ничего не сделает. Вероятно, вы захотите создать экземпляр своего настраиваемого контроллера представлений passengerInformation из раскадровки, установить свойство строки barcode в контроллере представления, а затем представить его с помощью presentViewController:animated:completion:.В вашем методе viewLillAppear контроллера просмотра вы должны взять свойство штрих-кода, извлечь нужную вам информацию и установить его в свои текстовые поля.

Ваш метод submitCodeAuto() объявлен как IBAction, даже если вы его не используете. Требуется параметр sender, который вы игнорируете, вместо этого вы используете переменную barcode, которую вы не видите.

Функция submitCodeAuto() должна, вероятно, принимать параметр barcode типа String, так как это то, что, похоже, делает.

У вас есть несколько классов, имена классов которых начинаются с строчных букв. Имена классов должны начинаться с прописных букв.

Смежные вопросы