App maken: ook jij kunt het leren!

 

de iOS Academie Forums

Forums - Producten van de iOS Academie - Het eBook: Apps bouwen met Swift: Foutmelding voorbeeld blz 284 PickerView

Prunus  Op de eerste vier stappen van zijn/haar studiekaart scoort Cor 55%. Klokje11 jan 2015, 16:10
Avatar
Avatar
Berichten:83


Als ik de func onderaan blz 285 toevoeg (zie hieronder de laatste regel) krijg ik een foutmelding:

Invalid redeclaration of pickerView.

Wat doe ik fout?

Hierbij de code van de ViewController.swift:

import UIKit

 

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {

    @IBOutlet var mijnPickerView: UIPickerView!

 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        let pickerRow = mijnPickerView.selectedRowInComponent(0)

        let tekst = "Geselecteerd: (stringForRow(pickerRow))"

        (segue.destinationViewController as DetailViewController).infoText = tekst

    }

    

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

     

    }

 

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {

        return 1

    }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

        return 100

    }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {

        return "(row + 1)"

    }

    func stringForRow(row: Int) -> String {

        return " Regel (row + 1)"

    }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {

        return stringForRow(row)

    }

    

    

    }

 

    

 

Reageer


AppChanger  Laurens heeft nog geen Studiekaart. Klokje11 jan 2015, 18:02
Avatar
Avatar
Berichten:301
Fans:13


Dag Prunus

Dit komt omdat je deze functie al eens hebt aangeroepen. Maar dan met "row + 1". Kijk anders eens in het project van Roelf. Als het niet lukt zal ik het eens proberen van dichter bij te bekijken.

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {

 

        return stringForRow(row)

 

    }

Met vriendelijke groeten

Laurens

Reageer


Prunus  Op de eerste vier stappen van zijn/haar studiekaart scoort Cor 55%. Klokje11 jan 2015, 18:45
Avatar
Avatar
Berichten:83


Hoi Laurens,

 

Ik heb het voorbeeld in het boek van van Roelf overgetikt.

Waarschijnlijk ik heb ik iets niet goed begrepen. Wat moet het dan worden?

 

Prunus

Reageer


Prunus  Op de eerste vier stappen van zijn/haar studiekaart scoort Cor 55%. Klokje12 jan 2015, 12:13
Avatar
Avatar
Berichten:83


Ik zie nu dat alles werkt volgens het voorbeeld van het boek als ik de func prepareForSegue etc weglaat.

Als ik die toevoeg 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        let pickerRow = mijnPickerView.selectedRowInComponent(0)

        let tekst = "Geselecteerd: (stringForRow(pickerRow))"

        (segue.destinationViewController as DetailViewController).infoText = tekst

 

    }

 

Dan krijg ik een crash met de volgende melding:

2015-01-12 11Zelf zo'n smiley gebruiken? Typ dan :33: in je tekst en de rest gaat vanzelf! Kijk in het Woordenboek voor een overzicht van alle smileys.34.044 TestApp5 Nav Contr[3045:201579] -[UIView selectedRowInComponent:]: unrecognized selector sent to instance 0x7fb4eb51f7c0

2015-01-12 11Zelf zo'n smiley gebruiken? Typ dan :33: in je tekst en de rest gaat vanzelf! Kijk in het Woordenboek voor een overzicht van alle smileys.34.047 TestApp5 Nav Contr[3045:201579] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView selectedRowInComponent:]: unrecognized selector sent to instance 0x7fb4eb51f7c0'

*** First throw call stack:

(

0   CoreFoundation                      0x000000010b657f35 __exceptionPreprocess + 165

1   libobjc.A.dylib                     0x000000010d19bbb7 objc_exception_throw + 45

2   CoreFoundation                      0x000000010b65f04d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205

3   CoreFoundation                      0x000000010b5b727c ___forwarding___ + 988

4   CoreFoundation                      0x000000010b5b6e18 _CF_forwarding_prep_0 + 120

5   TestApp5 Nav Contr                  0x000000010b4724dc _TFC18TestApp5_Nav_Contr14ViewController15prepareForSeguefS0_FTCSo17UIStoryboardSegue6senderGSqPSs9AnyObject___T_ + 396

6   TestApp5 Nav Contr                  0x000000010b47288b _TToFC18TestApp5_Nav_Contr14ViewController15prepareForSeguefS0_FTCSo17UIStoryboardSegue6senderGSqPSs9AnyObject___T_ + 75

7   UIKit                               0x000000010c43571c -[UIStoryboardSegueTemplate _perform:] + 151

8   UIKit                               0x000000010bee48be -[UIApplication sendAction:to:from:forEvent:] + 75

9   UIKit                               0x000000010bfeb410 -[UIControl _sendActionsForEvents:withEvent:] + 467

10  UIKit                               0x000000010bfea7df -[UIControl touchesEnded:withEvent:] + 522

11  UIKit                               0x000000010bf2a308 -[UIWindow _sendTouchesForEvent:] + 735

12  UIKit                               0x000000010bf2ac33 -[UIWindow sendEvent:] + 683

13  UIKit                               0x000000010bef79b1 -[UIApplication sendEvent:] + 246

14  UIKit                               0x000000010bf04a7d _UIApplicationHandleEventFromQueueEvent + 17370

15  UIKit                               0x000000010bee0103 _UIApplicationHandleEventQueue + 1961

16  CoreFoundation                      0x000000010b58d551 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17

17  CoreFoundation                      0x000000010b58341d __CFRunLoopDoSources0 + 269

18  CoreFoundation                      0x000000010b582a54 __CFRunLoopRun + 868

19  CoreFoundation                      0x000000010b582486 CFRunLoopRunSpecific + 470

20  GraphicsServices                    0x000000010f74e9f0 GSEventRunModal + 161

21  UIKit                               0x000000010bee3420 UIApplicationMain + 1282

22  TestApp5 Nav Contr                  0x000000010b4742ee top_level_code + 78

23  TestApp5 Nav Contr                  0x000000010b47432a main + 42

24  libdyld.dylib                       0x000000010d975145 start + 1

)

libc++abi.dylib: terminating with uncaught exception of type NSException

 

(lldb) 

 

 

Wie weet wat hier fout gaat?

Reageer


David  David heeft nog geen Studiekaart. Klokje12 jan 2015, 16:39
Avatar
Avatar
Berichten:95


    func stringForRow(row: Int) -> String {

 

        return " Regel (row + 1)"

 

    }

 

 

hier zit de foutmelding in.

het moet worden:

    func stringForRow(row: Int) -> String {

 

        return " Regel /(row + 1)"

 

    }

 

 

 

 

 

 

 

 

Reageer


David  David heeft nog geen Studiekaart. Klokje12 jan 2015, 16:42
Avatar
Avatar
Berichten:95


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

 

        let pickerRow = mijnPickerView.selectedRowInComponent(0)

 

        let tekst = "Geselecteerd: (stringForRow(pickerRow))"

 

        (segue.destinationViewController asDetailViewController).infoText = tekst

 

 

Hier vergeet je hem ook weer:

 

 let tekst = "Geselecteerd: (stringForRow(pickerRow))"

 

//moet worden:

 let tekst = "Geselecteerd: /(stringForRow(pickerRow))"

 

p.s de tekens: / die ik invoer moet je even 180 draaien. die van de 180 draaien laat dit form niet zien.

 

Deze foutmelding betekent: "jij zegt dat ik dat ken om te gebruiken, maar ik ken dat helemaal niet!

 

bij de array[variable die die niet kent], bij het installeren of decaleren (of hoe je dat noemt) gaat dat mis, hij wil er namelijk meer kennen. (denk ik)

 

Reageer


Prunus  Op de eerste vier stappen van zijn/haar studiekaart scoort Cor 55%. Klokje12 jan 2015, 17:06
Avatar
Avatar
Berichten:83


Hallo David,

 

Bedankt voor je reactie,  maar ik zie het nog niet. Volgens mij is de verbetering die je opgeeft, precies dezelfde code als die ik gebruik. Help :)

 

Dit is de volledige ViewController code:

import UIKit

 

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {

    @IBOutlet var mijnPickerView: UIPickerView!

    func stringForRow(row: Int) -> String {

        return " Regel (row + 1)"

    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        let pickerRow = mijnPickerView.selectedRowInComponent(0)

        let tekst = "Geselecteerd: (stringForRow(pickerRow))"

        

       (segue.destinationViewController as DetailViewController).infoText = tekst

    }

    

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

     

    }

 

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {

        return 1

    }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

        return 100

    }

    

    

  

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {

        return stringForRow(row)

    }

    

 

}

 

gr. Prunus

Reageer


David  David heeft nog geen Studiekaart. Klokje12 jan 2015, 17:09
Avatar
Avatar
Berichten:95


 let tekst = "Geselecteerd: (stringForRow(pickerRow))"

Het moet worden.

 

 let tekst = "Geselecteerd: /(stringForRow(pickerRow))"

 

dit teken / 180 graden draaien. als dat niet de fout zou ik het niet weten. anders moet appchanger of roelof even kijken (die hebben hier meer verstand van dan ik)

je kan ook even het bestand online zetten via dropbox. dan kunnen we de fout er makkelijk uithalen.

 

 

Reageer


Prunus  Op de eerste vier stappen van zijn/haar studiekaart scoort Cor 55%. Klokje12 jan 2015, 17:18
Avatar
Avatar
Berichten:83


Hoi David,

 

Die slashes  stonden er wel, maar waren om de een andere manier weggevallen.

 

Hij blijft de fout geven:

 

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView selectedRowInComponent:]: unrecognized selector sent to instance 0x7fa42a544b20'

 

Misschien moet Roelf maar even reageren :)

 

Bedankt in ieder geval zover.

 

gr. Prunus

Reageer


Prunus  Op de eerste vier stappen van zijn/haar studiekaart scoort Cor 55%. Klokje12 jan 2015, 18:37
Avatar
Avatar
Berichten:83


Hallo David,

 

Hierbij de link naar het bestand in dropbox.

 

https://www.dropbox.com/sh/25k2q2usbu7u0jm/AAA9f3zhsJezb9SJMk5heW-aa?dl=0

 

Het is natuurlijk maar een oefening, maar ik wil begrijpen wat er mis is.

Bedankt vast.

 

gr. prunus

Reageer


AppChanger  Laurens heeft nog geen Studiekaart. Klokje12 jan 2015, 20:58
Avatar
Avatar
Berichten:301
Fans:13


Dag Prunus,

Het is opgelost!

https://www.dropbox.com/sh/qx7zzy7t6duji67/AABBGi4dUBnRsNb27i25_cN9a?dl=0

Er was iets mis met de verbinding tussen je view en pickerview.

Met vriendelijke groeten

Laurens

Reageer

Leuk! 1 persoon vindt vindt dit leuk.

Prunus  Op de eerste vier stappen van zijn/haar studiekaart scoort Cor 55%. Klokje12 jan 2015, 22:40
Avatar
Avatar
Berichten:83


Bedankt!

Het zat hem dus in de outlet:

@IBOutlet weak var mijnPickerView: UIPickerView!

dat moest zijn @IBOutlet var mijnPickerView: UIPickerView!

 

dus zonder "weak"

 

Puntje voor de volgende release van het boek :)

 

Nogmaals bedankt!

 

gr. prunus

Reageer

Leuk! 1 persoon vindt vindt dit leuk.

AppChanger  Laurens heeft nog geen Studiekaart. Klokje13 jan 2015, 00:09
Avatar
Avatar
Berichten:301
Fans:13


Dag Prunus,

De weak staat er nog steeds. Er staat volgens mij geen fout in het boek.

 @IBOutlet weak var mijnPickerView: UIPickerView!

 

Ofwel is het weak of anders strong. Dit gebeurt automatisch als je je objecten naar je viewcontroller sleept.

Met vriendelijke groeten

Laurens

Reageer


Prunus  Op de eerste vier stappen van zijn/haar studiekaart scoort Cor 55%. Klokje13 jan 2015, 12:56
Avatar
Avatar
Berichten:83


hi Laurens,

Ik zag nu inderdaad geen enkel verschil in de code.

Ik heb de outlet weggegooid en opnieuw geplaatst. Nu doet ie het hèhè :)

gr. Prunus

 

Reageer

Leuk! 1 persoon vindt vindt dit leuk.