Nous avons un gros problème avec la version actuelle de Xcode (10.2).
Il existe une classe BasicViewController
avec la signature suivante:
class BasicViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
Ensuite, nous avons une autre classe comme ExampleViewController: BasicViewController
qui a une logique supplémentaire.
Vient maintenant la partie délicate ...
Nous construisons et exécutons l'application sur différents simulateurs et appareils et tout fonctionne correctement. Ensuite, nous archivons l'application et soudainement didSelectRow
n'est plus lancé. Un nettoyage en profondeur du projet nous a permis de reproduire le problème sans avoir besoin d'archiver à nouveau.
Je ne peux penser à aucun cas où cela pourrait se produire. Et cela devient encore pire, car j'ai trouvé des problèmes plus similaires avec les méthodes UITableViewDelegate
qui n'étaient pas appelées dans la classe enfant uniquement lors de l'exécution de l'application archivée. Cela pourrait-il être un problème avec certaines des optimisations lors de l'archivage et de la soumission de l'application?
Je vérifie que nous avons correctement défini les dataSource
et delegate
de la table, il n'y a pas de reconnaissance de gestes sur la table. La même logique fonctionne bien après l'exécution de l'application deuxième/troisième fois, mais échoue la première fois après un nettoyage en profondeur du projet.
Nous avons fait un test et défini les UITableViewDataSource
et UITableViewDelegate
dans la classe enfant, puis cela fonctionne comme prévu à chaque fois. Il semble que l'héritage des protocoles ne fonctionne pas bien. Si nous conservons les protocoles dans le parent et les ajoutons également dans la classe enfant, cela indique que les protocoles de la classe enfant sont redondants.
Quelqu'un a-t-il vécu quelque chose de similaire? Toutes suggestions sont les bienvenues.
Vous pouvez rencontrer https://bugs.Swift.org/browse/SR-10257 dans le compilateur Swift 5.0. Cela se produira si vous avez au moins trois fichiers:
BasicViewController.Swift
SomeOtherFile.Swift
ExampleViewController.Swift
Si SomeOtherFile.Swift
Fait des appels à une valeur de type AnyObject
-, vous compilez en mode wholemodule
et les fichiers sont passés au compilateur dans l'ordre ci-dessus (avec SomeOtherFile.Swift
Au milieu des deux), il semble que le compilateur ne parvienne pas à déduire correctement @objc
- ness pour l'implémentation de func tableView(_:, didSelectRowAt:)
. Vous pouvez contourner ce problème en le marquant explicitement avec @objc
Pour l'instant.
Je suis tombé sur le même problème. Je l'ai corrigé en ajoutant les méthodes directement dans ma classe principale, et override les dans les autres classes. Maintenant, tout est appelé correctement.