Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Swift - Barcode lezen en doorgeven aan app

Pagina: 1
Acties:

  • Brynnie
  • Registratie: Februari 2001
  • Niet online
Hello,

Ik ben momenteel op ontdekkingsreis in Apple's iOS programmeertaal Swift. Op internet zijn talloze voorbeelden, tutorials en video's te vinden.

Bij één bepaald probleem vind ik echter niet onmiddellijk een oplossing:
In de app waarmee ik momenteel experimenteer (lokaal builden en uitproberen op m'n iPhone), zit een functie die barcodes kan lezen en decoderen. De camera starten en de barcode lezen, lukt. Ik kan een label op het scherm de gedecodeerde tekst laten weergeven.

Het probleem is echter dat ik deze waarde wil doorgeven aan een volgende viewcontroller, zonder dat de gebruiker iets moet doen. Ik heb zelf gevonden hoe het moet door de gebruiker bvba op een knop te laten tikken, maar dat wil ik niet. De app moet zelf, van zodra een barcode gescand is, de waarde doorgeven aan een volgende viewcontroller en dus het camerascherm zelf sluiten.

De code om de barcode te scannen, heb ik van deze pagina gehaald:
http://www.appcoda.com/qr-code-reader-swift/

De info die ik vind op internet, vereist ofwel een actie van de gebruiker, ofwel gaan de internetpagina's over hoe je na het scannen van bvb een URL in een QR code, onmiddellijk naar die webpagina kan gaan. Zo staan er verschillende apps in de App Store. Ik wil echter dat de gescande (gedecodeerde) code verder in de app beschikbaar blijft en dat de camerafunctie automatisch gestopt wordt van zodra een barcode gescand is.

Heeft iemand enig idee hoe ik dit best aanpak? Welke zoektermen gebruik je hiervoor op Google?

Hou er aub rekening mee dat ik geen held ben in Swift en nog volop aan het leren ben ;)

  • bregweb
  • Registratie: Juni 2005
  • Laatst online: 16:05
In onze winkel kan ik scanners laten scannen, of ik kan ze laten scannen en een suffix (bijv <Enter>) meegeven. Zit dat misschien ook op jouw scanner?

Hattrick: Thorgal Eagles


  • Brynnie
  • Registratie: Februari 2001
  • Niet online
Het gaat over de scan-mogelijkheden die dank zij AVCaptureSession uit het AVFoundation framework (https://developer.apple.c...ationFramework/index.html) automatisch in iOS 8 ingebakken zitten. Er is geen fysieke scanner waar je instellingen kan wijzigen.

  • Tales
  • Registratie: Juni 2007
  • Laatst online: 16:43
Ik heb mijzelf nog niet volledig in Swift gegooid. Maar wat je dus wilt is dat je automatisch naar de volgende viewController gaat op het moment dat de barcode herkend wordt. Dit kun je doen door de code die uitgevoerd wordt als er een knop ingedrukt wordt te verplaatsen naar de delegate die wordt opgeroepen om de barcode op het scherm te laten zien.

In de functie:
func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects:
zul je waar de barcode op het display getoond worden dus naar het volgende scherm moeten navigeren.
if metadataObj.stringValue != nil {
JOUW CODE HIER
messageLabel.text = metadataObj.stringValue
}

  • Brynnie
  • Registratie: Februari 2001
  • Niet online
Bedankt voor de input. Het was inderdaad gewoon logisch redeneren en op de plaats waar de label ingesteld wordt, de doorverwijs invoegen.

Nu is het probleem dat de segue die ik (1x) aanroep, blijkbaar 2x uitgevoerd wordt:

Swift:
1
self.performSegueWithIdentifier("GoToBarcodeView", sender : nil)


en voor de segue wordt uitgevoerd, geeft hij de barcode als variabele door

Swift:
1
2
3
4
5
6
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
       if (segue.identifier == "GoToBarcodeView") {
           var svc = segue.destinationViewController as ShowBarcodeInfo;
           svc.toPass = ScannedBarCode
       }
    }


Na het scannen van de barcode, zie ik op de iPhone dat de app 2x de nieuwe view met de barcode info naar boven schuift en in de logging krijg ik inderdaad een warning:

Swift:
1
2015-01-09 17:46:36.937 AppNaam[640:125954] Warning: Attempt to present < AppNaam.BarcodeInfoView: 0x157642130> on < AppNaam.BarcodeInfoView: 0x157520980> while a presentation is in progress!


Weet iemand waarom dit gebeurt?

De segue aanroep staat slechts 1x in de code en wordt ook slechts 1x aangeroepen. De variabele (ScannedBarCode) wordt wel correct doorgegeven.

  • BoringDay
  • Registratie: Maart 2009
  • Laatst online: 13-05 21:49
"Attempt to present < AppNaam.BarcodeInfoView: 0x157642130> on < AppNaam.BarcodeInfoView: 0x157520980>"

Ik zou het niet zo snel weten maar als ik de melding lees, heb je wel de destinationViewController ?

  • Brynnie
  • Registratie: Februari 2001
  • Niet online
BarcodeInfoView is de destination viewcontroller. Alles werkt, alleen zie je het scherm 2x naar boven geschoven worden, en Xcode geeft de warning. De app loopt wel verder zoals het hoort, hij crasht niet.

Maar netjes is het ook niet...

  • BoringDay
  • Registratie: Maart 2009
  • Laatst online: 13-05 21:49
Als ik de melding zo bekijk lijkt het alsof je een viewController present vanuit dezelfde viewController.
Ik denk dat je er even met de debugger doorheen moet.

Breakpoint plaatsen in de methode prepareForSegue en kijken welke waarde je op dat moment allemaal hebt.
Pagina: 1