2016-10-22 2 views
-1

Mon code ne fonctionne pas. Je ne sais pas pourquoi. Le problème est la propriété de la fonction switchChanged. Si la propriété est vide, le code fonctionne.Comment utiliser UISwitch correctement?

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    let rect = CGRectMake(130, 100, 0, 0) 
    let uiSwitch = UISwitch(frame: rect) 
    uiSwitch.setOn(true, animated: true) 
    uiSwitch.addTarget(self, action: "switchChanged", forControlEvents: UIControlEvents.ValueChanged) 

    self.view.addSubview(uiSwitch) 
} 

func switchChanged(uiSwitch: UISwitch) { 
    var message = "Turn on the switch" 
    if uiSwitch.on { 
     message = "Turn off the switch" 
    } else { 
     message = "Turn on the switch" 
    } 
    let alert = UIAlertController(title: "Information", message: message, preferredStyle: UIAlertControllerStyle.Alert) 
    let action = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil) 
    alert.addAction(action) 
    self.presentViewController(alert, animated: true, completion: nil) 
} 

Erreur: "libC++ abi.dylib: mettre fin à l'exception du type uncaught NSException"

+0

Vous avez déjà indiqué votre utilisation de Swift dans les tags, il n'est pas nécessaire de l'ajouter au titre. –

Répondre

3

"switchChanged" est pas le nom de sélection correcte, vous devez utiliser "switchChanged:" pour tenir compte du paramètre. switchChanged serait une méthode sans paramètres.

En outre, dans Swift, vous devez utiliser #selector(switchChanged(_:)) à la place. Cela validera l'existence de sélecteurs lors de la compilation.

+0

uiSwitch.addTarget (self, action: #selector (ViewController.switchChanged (_ :)), forControlEvents: UIControlEvents.ValueChanged) –

+0

Le Xcode me demande d'insérer "," avant "#". –

+0

Mais "switchChanged:" fonctionne! Je vous remercie! –