Swift 3, erreur de code..

Bonjour tout le monde,


 


Depuis vendredi dernier, j'ai mis à  jour Xcode pour passer en 8.0 et avec l'arrivé de Swift 3, mon projet par complètement dans tout les sens.. je me retrouve avec beaucoup d'erreur..


J'arrive à  en corriger la plupart sauf que là , je bloque particulièrement sur une..


 


En gros, dans mon main.storyboard, j'ai une vue qui renvoie vers une autre (via un bouton), le segue à  comme identifiant : "segue1"


 


Dans mon ViewController.swift, j'ai ça :



override func shouldPerformSegueWithIdentifier(identifier: (String!), sender: AnyObject!) -> Bool {
print("segue ?")
if(identifier == "segue1"){
// code ici pour faire des tests
// return true ou false suivant le résultat
}
else{
// toute les autres pages
return true
}
}

Avant, ça fonctionnait bien.. et maintenant je me retrouve avec cette erreur : 


 



 


Method does not override any method from its superclass



 


J'ai beau chercher, je trouve rien de concret, du coup, je m'en remet à  vous ^^


Quelqu'un à  déjà  eu cette erreur ? 


Pourquoi maintenant il ne veut pas que j'override la méthode alors qu'avant ça ne lui posait pas de problème ? :/


Mots clés:

Réponses

  • J'parle pas Swift, mais je dirais :


    La doc (actuelle, ie Swift 3) :


    func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool

    Ton code:


    func shouldPerformSegueWithIdentifier(identifier: (String!), sender: AnyObject!) -> Bool {


  • Lors de mes tests, j'ai aussi essayé shouldPerformSegue, j'ai la même erreur :/


  • La signature de la méthode a changé.


    Le plus simple : tu commence à  taper shouldPerformSegue dans l'éditeur d'Xcode et tu laisse l'autocompletion finir le nom de la méthode pour toi. ApreÌ€s tu c/c ton code et tu l'adapte au besoin.


  • Oui j'vois ce que tu veux dire, le soucis, c'est que là , même avec la bonne méthode, ça fonctionne pas :/


    Du coup, je sais pas si j'ai oublié un truc ou pas.. mais dans l'idée, je pense pas.


    D'où mon post pour voir si un truc vous saute aux yeux ;)


     


    D'ailleurs en supprimant override, je me retrouve avec cette erreur : 


     



     


    Method 'shouldPerformSegue(withIdentifier:sender:)' with Objective-C selector 'shouldPerformSegueWithIdentifier:sender:' conflicts with method 'shouldPerformSegue(withIdentifier:sender:)' from superclass 'UIViewController' with the same Objective-C selector



     


    Du coup, je sais pas trop quoi faire là  :s


  • Fais un clean sur le projet. Si ça ne va pas vire les DerivedData (google est ton copain). Si ça va toujours pas poste nous un bout de code en expliquant ce que ça doit faire et ce que ça fait. Si c'est un message d'erreur poste le avec  ;)


  • InsouInsou Membre
    septembre 2016 modifié #7

    Rhaaa j'viens de trouver le soucis..


     


    Dans ma déclaration de fonction j'avais : 


     


    override func shouldPerformSegue(withIdentifier identifier: String, sender: AnyObject!) -> Bool {


     


    alors que c'était : 


     


    override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {


     


    Tout ça pour ça >_< !


     


    Finalement j'aurai dû être plus attentif au message de Larme..


     


    Je cloture pas le sujet, je sens que j'vais avoir d'autres soucis/questions avec Swift 3 :s


  • J'me doutais que j'allais rencontrer d'autre problème ^^


     


    J'vous explique le truc..


    J'ai une tableview qui est censé charger des données via un json .. lorsque j'arrive sur cette page, je me retrouve avec l'erreur : 


     



     


    '-[MonApp.MaPage tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x7fe5d3c243a0'



     


    De vue, il y aurai un soucis avec numberOfRowsInSection


     


    Dans mon code, elle est pourtant bien déclarée :


     



     


    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {


         return ArrayCategories.count


    }



     


    Mon tableview est bien relié au datasource et au delegate..


     


    En googlant, j'ai testé quelques trucs mais rien n'a fonctionné..


     


    Une idée pour me débloquer ? :s


  • Joanna CarterJoanna Carter Membre, Modérateur

    Si tu utilise Swift 3, il faut utiliser les règles de code pour Swift 3. As-tu utiliser le "wizard" pour mettre à  jour ton code ?


     


    Regardes bien la bonne signature :



    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
    return ArrayCategories.count
    }
  • Bah pourtant je suis bien passé par le wizard pour mettre à  jour mon code (qui m'a foutu un bordel pas possible d'ailleurs mais bon..)..


     


    Enfin bref, j'étais passé à  côté du "_ " qui change..


     


    ça fait 2 fois que j'ai des erreurs et 2 fois que c'est un problème de signature que j'retrouve pas.. j'vais être plus vigilant à  l'avenir :p


     


    Merci Joanna ^^


  • InsouInsou Membre
    octobre 2016 modifié #11

    Bonjour,


     


    Bon, j'ai réussi à  remettre en état mon application en swift 3, validée sur le store, c'est nickel ^^


     


    Du coup, maintenant j'essaie d'intégrer les notifications (distantes) à  mon projet mais à  chaque tutos que je test, ça foire à  un moment où un autre..


    Lorsque j'avais fait des tests sur swift 2.2, ça fonctionnait bien, aucun soucis.


    Depuis le passage à  swift 3, impossible de trouver un tuto qui fonctionne bien :/


    Du coup ma question est : Avez-vous un lien/tuto (anglais ou français) pour mettre en place les notifications distantes avec swift 3 ?


     


    Merci de votre aide ^^


     


    // Edit


     


    Pour les notifications en swift 3, j'ai réussi à  me débrouiller avec ces liens là  :


    https://github.com/ashishkakkad8/Notifications10Swift


    http://stackoverflow.com/questions/37956482/registering-for-push-notifications-in-xcode-8-swift-3-0/39763879


    https://www.sitepoint.com/developing-push-notifications-for-ios-10/(tout ce qui est code swift dans ce auto n'est pas top, du coup j'ai utilisé les 2 liens précédents pour faire le code swift mais la procédure pour les certificats est bonne..)


Connectez-vous ou Inscrivez-vous pour répondre.