La programmation d'un UIButton ne travaille pas dans Swift 4 Xcode 9 Beta 6, Ne peut pas ajouter une cible
Dans le passé, je n'ai eu aucun problème de création d'un UIButton de la programmation, mais depuis que j'ai été en utilisant Xcode 9 et Swift 4, je ne peux pas trouver un moyen de faire cette erreur de s'en aller.
//Adding target to UIButton
func PositionStartButton(xOffset: Float){
StartButton.frame = CGRect(x: Int(0 - 40 + xOffset), y: 0, width: 80, height: 80)
StartButton.setImage(#imageLiteral(resourceName: "Logo_Final_WHITE_Face"), for: .normal)
StartButton.addTarget(self, action: "pressButton:", for: .touchUpInside)
ScrollView.addSubview(StartButton)
}
//The target function
func pressButton(_ sender: UIButton){
print("\(sender)")
}
Message d'erreur: "NSInvalidArgumentException', la raison: '-[le Jeu.MainMenuViewController pressButton:]: unrecognized sélecteur envoyé à l'instance 0x10440a6b0'
- Votre première ligne de code jamais compile dans toutes les versions de Swift. Donc, vous devriez avoir eu des problèmes, ou autre chose, vous avez trop changé à partir de votre sans-problème de code. De toute façon, vous avez besoin de montrer où la ligne est placée. Montrer toute la méthode, y compris la ligne.
- Un de plus, pouvez-vous me dire où vous obtenez Xcode 9 Beta 6? La version de Xcode disponible sur Apple page de téléchargement je peux trouver maintenant est Xcode 9 beta 5 (Build 9M202q).
- Merci, vous avez raison. J'ai édité le code pour une version qui a fait un travail de retour dans les jours de Swift 2. Pouvez-vous voir ce que je suis en train de parler maintenant?
- Je crois que je peux voir. Mais votre question est juste une combinaison d'un problème de Swift 2.2 et un autre de Swift 4.
- Pourquoi je suis à même de google, ce genre de choses. WTF??
Vous devez vous connecter pour publier un commentaire.
Deux points.
Tout d'abord, depuis Swift 2.2 (fourni avec Xcode 7.3, publié plus d'un an), a recommandé le sélecteur de notation est
#selector(...)
. Avec l'aide de la notation, vous pouvez obtenir plus utile messages de diagnostic, que l'utilisation d'autres de la notation.(Vous ne devriez pas ignorer tous les avertissements affichés avec les paramètres recommandés.)
Seconde, en Swift 4, vous devez annoter explicitement les méthodes appelées par le biais du sélecteur avec
@objc
. (Dans des cas très limités, Swift implicitement applique la notation, mais pas beaucoup.)Ainsi, votre code devrait être:
Ce n'est pas critique, mais il vaut mieux suivre un codage simple règle de Swift: tapez uniquement les noms sont en majuscules.
Mieux renommer votre
PositionStartButton
,StartButton
etScrollView
, si vous pensez que vous pouvez avoir une autre chance de montrer votre code publiquement.@objc
lorsque les méthodes sont appelées par ObjC sélecteurs, à moins qu'une autre règle implique@objc
.