ios - unrecognized selector sent to instance in swift building a UISlider -
ok i'm trying build simple uislider in swift , same error when run code, it's sigbrt error , gives me error:
2015-06-03 22:36:52.659 myslider[2780:224039] * terminating app due uncaught exception 'nsinvalidargumentexception', reason: '-[myslider.viewcontroller slidervaluechanged:]: unrecognized selector sent instance 0x7f92f1e25340' * first throw call stack:
here's code:
import uikit class viewcontroller: uiviewcontroller { @iboutlet weak var valuelabel: uilabel! var slider: uislider! override func viewdidload() { super.viewdidload() slider = uislider(frame: cgrectmake(100, 100, 200, 23)) slider.minimumvalue = 0 slider.maximumvalue = 100 view.addsubview(slider) slider.center = view.center slider.value = slider.maximumvalue / 3.0 slider.addtarget(self, action: "slidervaluechanged:", forcontrolevents: uicontrolevents.valuechanged) slider.continuous = false saluedidchange(slider) changecolor() thumbimage() } func saluedidchange(sender: uislider){ valuelabel.text = "\(sender.value)" } func changecolor(){ slider.maximumtracktintcolor = uicolor.redcolor() slider.minimumtracktintcolor = uicolor.greencolor() } func thumbimage(){ slider.setthumbimage(uiimage(named: "thumbnormal"), forstate: uicontrolstate.normal) slider.setthumbimage(uiimage(named: "thumbhighlighted"), forstate: uicontrolstate.highlighted) } }
the error telling what's wrong. you're creating uislider in code. set it's target this:
slider.addtarget( self, action: "slidervaluechanged:", forcontrolevents: uicontrolevents.valuechanged) so when change value of slider, method going try call method "slidervaluechanged:" in view controller. method needs take 1 parameter, sender:
@ibaction func slidervaluechanged(sender: anyobject) { //do new slider value. } the type of sender can type uislider.
if don't have method signature in view controller, crash when change slider value, are.
edit:
as others have pointed out in comments/answers, looks target method misnamed method saluedidchange. should rename it.
it's idea put @ibaction tag on methods called controls. must if you're going define control , connect it's action in interface builder (which idea, rather doing in code.)
Comments
Post a Comment