Je pratique comment communiquer entre deux contrôleurs d'affichage à l'aide de protocole et de délégué (dans l'arrière-plan Xcode même lorsque j'utilise le protocole dans mon projet, je reçois le même problème, le délégué est nul), mais le problème après tout définir Cela me montre que mon délégué est nul et l'expéditeur VC n'envoie aucune donnée puisque le délégué est nulle.
J'ai confirmé au protocole et j'ai défini le destinataire VC en tant que délégué, mais je ne peux toujours pas voir où le délégué problème est. p>
le protocole p> L'expéditeur VC p> Le récepteur VC P> class TheReceiverVc1: theCommunicationsStructionProtocol{
var TheSenderVCObj: TheSenderVC?
func delegateLuncher(){
self.TheSenderVCObj?.delegate = self
}
func dataToTransmit(Data: String) {
print("from VC1: \(Data)")
}
}
3 Réponses :
Où êtes-vous créé la référence de remplacer laissez essayer ci-dessous le code: p> Votre thesendervcobj aussi nul selon votre code. P>
Convertir Var Thesendervcobj: Thesendervc? à Var thesendervcobj = thesendervcobj ().
c'est faux var thesendervcobj = thesendervcobj (), il devrait être var thesendervcobj = thesendervc (), thesendervc () est le nom de la classe de l'expéditeur, mais votre code ne résout pas le problème, mais j'apprécie votre réponse
Pas de problème Garg, mais même si je le fais Thesendervcobj = Thesendervcobj (), le délégué est toujours nul
Pouvez-vous partager le projet de démonstration si vous en avez, je pense que nous avons fait quelque chose de mal dans la partie des références, peut être créé 2 références de Thesendervc dans lequel une délégation et une autre ne le font pas. Vous pouvez également essayer à votre fin aussi.
J'ai testé l'objet à l'aide d'init () {} et de désinit {} dans la classe de l'expéditeur, et j'ai découvert que l'objet est initialisé puis désinitialisé et finalement initialisé à nouveau. Je vais essayer de trouver la solution et de vous faire savoir, merci de votre aide
parce que le Assurez-vous également lorsque vous utilisez le délégué le définit comme faible var: p> thereceivervc1 code> était automatique DEINIT par
arc code>.
Vous devez enregistrer la référence de l'instance comme celle de celui-ci:
weak var delegate: theCommunicationsStructionProtocol?
Vous avez raison, j'ai découvert à l'aide d'init () {} et deninit {} qu'il a initialisé l'objet deux fois, puis la numérisé
Oui Toujours vous utilisez 'TherecEivervc1 ()' Vous créez une nouvelle instance.
Enfin, j'ai trouvé la solution! Le problème est que je faisais des cas de Thesendervc, au lieu de prendre avec l'original Thesendervc. Quand je faisais un objet (une instance) de Thesendervc, le problème est survenu! Au lieu de cela, je dois accéder à l'original Thesendervc, ce qui signifie que je dois utiliser static :)
Voici l'ancien délégué configuré p> de thesendervc p> < p> Voici le nouveau délégué mis en place p> donc le p> sera modifié en p> < PRE> XXX PRE> Étant donné qu'il inclut une propriété statique (déléguée) p> d'autre part, le revenir doit être changé de: p> à: p> accéder au délégué de l'original Thesendervc () P> P>
Démarrer les noms de protocole avec des lettres majuscules
Cela vous aidera à l'avenir si vous suivez certaines conventions SWIFT; Les variables et les propriétés doivent commencer par une lettre minuscule. Les noms de classe, de structure et de protocole devraient commencer par une lettre majuscule.
Le problème est cette ligne:
var thesendervcobj = thesendervc () code>. Ceci est pas i> l'instance dont vous souhaitez définir le délégué. Vous définissez donc le délégué du mauvais objet. Pendant ce temps, le délégué du réel i> thesendervc reste
nil code>. Veuillez lire: ProgrammingIos.net/dont-make-a- Nouvelle instance par erreur