Meine erste App, deren Fehler und Optimierungen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • macmoonshine schrieb:

    Amin Negm-Awad schrieb:

    So wie der Kommunismus die Ungleichheit der Menschen.
    Oder der Kapitalismus allen die gleichen Chancen einräumt. :D
    So ist es eben auch mit Objective-C und Swift: Beides ist gleich, nur Objective-C eben besser.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Ghost108 schrieb:

    was für ein Buch wäre denn zu empfehlen?

    @MCDan
    zumindest funktioniert der Code so, solang ich das inout weg lasse ...



    * UPDATE *

    Habe den Code mal wie folgt angepasst:

    C-Quellcode

    1. //
    2. // ViewController.swift
    3. // Test
    4. //
    5. // Copyright (c) 2015 by Ghost108. All rights reserved.
    6. //
    7. import UIKit
    8. import AVFoundation
    9. import Foundation
    10. import CoreData
    11. class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, AVCaptureMetadataOutputObjectsDelegate {
    12. @IBOutlet weak var LebensmittelTable: UITableView!
    13. @IBOutlet weak var NavBarLM: UINavigationItem!
    14. let session : AVCaptureSession = AVCaptureSession()
    15. let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
    16. let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
    17. var previewLayer : AVCaptureVideoPreviewLayer!
    18. var highlightView : UIView = UIView()
    19. var detectionString : String! = ""
    20. /*************** VIEW DID LOAD ***************/
    21. override func viewDidLoad() {
    22. super.viewDidLoad()
    23. // Button Scan einblenden
    24. var imageViewright:UIImageView = UIImageView()
    25. imageViewright.frame = CGRectMake(0, 0, 26, 26)
    26. var rightImage:UIImage = UIImage(named: "barcode")!
    27. imageViewright.image = rightImage
    28. var rightView:UIView = UIView()
    29. rightView.frame = CGRectMake(0, 0, 26, 26)
    30. rightView.addSubview(imageViewright)
    31. var rightGestureRecognizer:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "StartScan")
    32. rightView.addGestureRecognizer(rightGestureRecognizer)
    33. var righttem:UIBarButtonItem = UIBarButtonItem()
    34. righttem.customView = rightView
    35. self.navigationItem.rightBarButtonItem = righttem
    36. righttem.tintColor = UIColor.whiteColor()
    37. }
    38. /*************** SCAN ***************/
    39. func StartScan() {
    40. self.highlightView.autoresizingMask = .FlexibleTopMargin | .FlexibleBottomMargin | .FlexibleLeftMargin | .FlexibleRightMargin
    41. self.highlightView.layer.borderColor = UIColor.greenColor().CGColor
    42. self.highlightView.layer.borderWidth = 3
    43. self.view.addSubview(self.highlightView)
    44. var error : NSError? = nil
    45. let input : AVCaptureDeviceInput? = AVCaptureDeviceInput.deviceInputWithDevice(device, error: &error) as? AVCaptureDeviceInput
    46. if input != nil {
    47. session.addInput(input)
    48. }
    49. let output = AVCaptureMetadataOutput()
    50. output.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue())
    51. session.addOutput(output)
    52. output.metadataObjectTypes = output.availableMetadataObjectTypes
    53. previewLayer = AVCaptureVideoPreviewLayer.layerWithSession(session) as! AVCaptureVideoPreviewLayer
    54. previewLayer.frame = self.view.bounds
    55. previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
    56. self.view.layer.addSublayer(previewLayer)
    57. session.startRunning()
    58. }
    59. /*************** BARCODE GEFUNDEN ***************/
    60. func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
    61. func getEAN (inout detectionString: String) {
    62. var highlightViewRect = CGRectZero
    63. var barCodeObject : AVMetadataObject!
    64. let barCodeTypes = [
    65. AVMetadataObjectTypeUPCECode,
    66. AVMetadataObjectTypeCode39Code,
    67. AVMetadataObjectTypeCode39Mod43Code,
    68. AVMetadataObjectTypeEAN13Code,
    69. AVMetadataObjectTypeEAN8Code,
    70. AVMetadataObjectTypeCode93Code,
    71. AVMetadataObjectTypeCode128Code,
    72. AVMetadataObjectTypePDF417Code,
    73. AVMetadataObjectTypeQRCode,
    74. AVMetadataObjectTypeAztecCode,
    75. AVMetadataObjectTypeITF14Code,
    76. AVMetadataObjectTypeInterleaved2of5Code,
    77. AVMetadataObjectTypeFace,
    78. AVMetadataObjectTypeDataMatrixCode
    79. ]
    80. for metadata in metadataObjects {
    81. for barcodeType in barCodeTypes {
    82. if metadata.type == barcodeType {
    83. barCodeObject = self.previewLayer.transformedMetadataObjectForMetadataObject(metadata as! AVMetadataMachineReadableCodeObject)
    84. highlightViewRect = barCodeObject.bounds
    85. detectionString = (metadata as! AVMetadataMachineReadableCodeObject).stringValue
    86. self.session.stopRunning()
    87. self.previewLayer.removeFromSuperlayer()
    88. println ("Scan: \(detectionString)")
    89. break
    90. }
    91. }
    92. }
    93. }
    94. getEAN(&detectionString!)
    95. }
    96. /*************** BUTTON SCAN SAVE ***************/
    97. @IBAction func ScanFertigstellen(sender: AnyObject) {
    98. func getCode(inout detectionString: String) {
    99. var eancode = detectionString
    100. println("Code: \(eancode)")
    101. }
    102. getCode(&detectionString!)
    103. }
    104. }
    Alles anzeigen
    Resultat:

    Zeile 147 gibt mir den gescannten Code aus.
    Zeile 162: gibt nur Code: aus ohne EAN Code
    Zeile 106 fehlt der Aufruf 'inout DetectionString: String' als Parameter der Funktion. Im Playground hast du es ja so auch gemacht ;)
    „Wer immer tut, was er schon kann, bleibt immer das, was er schon ist.“
    Henry Ford
  • C-Quellcode

    1. //
    2. // ViewController.swift
    3. // Test
    4. //
    5. // Copyright (c) 2015 by Ghost108. All rights reserved.
    6. //
    7. import UIKit
    8. import AVFoundation
    9. import Foundation
    10. class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, AVCaptureMetadataOutputObjectsDelegate {
    11. @IBOutlet weak var LebensmittelTable: UITableView!
    12. @IBOutlet weak var NavBarLM: UINavigationItem!
    13. let session : AVCaptureSession = AVCaptureSession()
    14. let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
    15. let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
    16. var previewLayer : AVCaptureVideoPreviewLayer!
    17. var highlightView : UIView = UIView()
    18. var lebensmittel = [LM_ITEMS]()
    19. var detectionString : String! = ""
    20. /*************** VIEW DID LOAD ***************/
    21. override func viewDidLoad() {
    22. super.viewDidLoad()
    23. self.DatenAbrufen()
    24. // Button Scan einblenden
    25. var imageViewright:UIImageView = UIImageView()
    26. imageViewright.frame = CGRectMake(0, 0, 26, 26)
    27. var rightImage:UIImage = UIImage(named: "barcode")!
    28. imageViewright.image = rightImage
    29. var rightView:UIView = UIView()
    30. rightView.frame = CGRectMake(0, 0, 26, 26)
    31. rightView.addSubview(imageViewright)
    32. var rightGestureRecognizer:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "StartScan")
    33. rightView.addGestureRecognizer(rightGestureRecognizer)
    34. var righttem:UIBarButtonItem = UIBarButtonItem()
    35. righttem.customView = rightView
    36. self.navigationItem.rightBarButtonItem = righttem
    37. righttem.tintColor = UIColor.whiteColor()
    38. }
    39. /*************** SCAN ***************/
    40. func StartScan() {
    41. // Button Scan ausblenden
    42. self.navigationItem.rightBarButtonItem = nil
    43. // Button Scan abbrechen einblenden
    44. self.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Stop, target: self, action: "ScanAbbrechen")
    45. self.navigationItem.leftBarButtonItem!.tintColor = UIColor.whiteColor()
    46. self.highlightView.autoresizingMask = .FlexibleTopMargin | .FlexibleBottomMargin | .FlexibleLeftMargin | .FlexibleRightMargin
    47. self.highlightView.layer.borderColor = UIColor.greenColor().CGColor
    48. self.highlightView.layer.borderWidth = 3
    49. self.view.addSubview(self.highlightView)
    50. var error : NSError? = nil
    51. let input : AVCaptureDeviceInput? = AVCaptureDeviceInput.deviceInputWithDevice(device, error: &error) as? AVCaptureDeviceInput
    52. // Button ToogleLight einblenden falls vorhanden
    53. if (device.hasTorch) {
    54. var imageViewright:UIImageView = UIImageView()
    55. imageViewright.frame = CGRectMake(0, 0, 26, 26)
    56. var rightImage:UIImage = UIImage(named: "light")!
    57. imageViewright.image = rightImage
    58. var rightView:UIView = UIView()
    59. rightView.frame = CGRectMake(0, 0, 26, 26)
    60. rightView.addSubview(imageViewright)
    61. var rightGestureRecognizer:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "ToogleLight")
    62. rightView.addGestureRecognizer(rightGestureRecognizer)
    63. var rightItem:UIBarButtonItem = UIBarButtonItem()
    64. rightItem.customView = rightView
    65. self.navigationItem.rightBarButtonItem = rightItem
    66. rightItem.tintColor = UIColor.whiteColor()
    67. }
    68. if input != nil {
    69. session.addInput(input)
    70. }
    71. let output = AVCaptureMetadataOutput()
    72. output.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue())
    73. session.addOutput(output)
    74. output.metadataObjectTypes = output.availableMetadataObjectTypes
    75. previewLayer = AVCaptureVideoPreviewLayer.layerWithSession(session) as! AVCaptureVideoPreviewLayer
    76. previewLayer.frame = self.view.bounds
    77. previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
    78. self.view.layer.addSublayer(previewLayer)
    79. session.startRunning()
    80. }
    81. /*************** BARCODE GEFUNDEN ***************/
    82. func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
    83. var highlightViewRect = CGRectZero
    84. var barCodeObject : AVMetadataObject!
    85. let barCodeTypes = [
    86. AVMetadataObjectTypeUPCECode,
    87. AVMetadataObjectTypeCode39Code,
    88. AVMetadataObjectTypeCode39Mod43Code,
    89. AVMetadataObjectTypeEAN13Code,
    90. AVMetadataObjectTypeEAN8Code,
    91. AVMetadataObjectTypeCode93Code,
    92. AVMetadataObjectTypeCode128Code,
    93. AVMetadataObjectTypePDF417Code,
    94. AVMetadataObjectTypeQRCode,
    95. AVMetadataObjectTypeAztecCode,
    96. AVMetadataObjectTypeITF14Code,
    97. AVMetadataObjectTypeInterleaved2of5Code,
    98. AVMetadataObjectTypeFace,
    99. AVMetadataObjectTypeDataMatrixCode
    100. ]
    101. for metadata in metadataObjects {
    102. for barcodeType in barCodeTypes {
    103. if metadata.type == barcodeType {
    104. barCodeObject = self.previewLayer.transformedMetadataObjectForMetadataObject(metadata as! AVMetadataMachineReadableCodeObject)
    105. highlightViewRect = barCodeObject.bounds
    106. detectionString = (metadata as! AVMetadataMachineReadableCodeObject).stringValue
    107. self.session.stopRunning()
    108. self.previewLayer.removeFromSuperlayer()
    109. performSegueWithIdentifier("goToNextViewer", sender: nil)
    110. println ("Scan: \(detectionString)")
    111. break
    112. }
    113. }
    114. }
    115. }
    116. /*************** BUTTON SCAN SAVE ***************/
    117. @IBAction func ScanFertigstellen(sender: AnyObject) {
    118. println ("ScanFertigstellen: \(detectionString)")
    119. }
    120. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Ghost108 ()

  • beide ViewController greifen auf die selbe Datei zu: ViewController.swift
    Außerdem führe ich damit den Code aus.
    Ansonsten würde dort der Println ScanFertigstellen: nicht erscheinen.
    Leider ohne EAN Code