-2
votes

Délégué est nul dans un programme SWIFT

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> xxx pré>

L'expéditeur VC p> xxx pré>

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 commentaires

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 () . Ceci est pas 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 thesendervc reste nil . Veuillez lire: ProgrammingIos.net/dont-make-a- Nouvelle instance par erreur


3 Réponses :


0
votes

Où êtes-vous créé la référence de thesendervcobj

remplacer var thesendervcobj: thesendervc? à var thesendervcobj = thesendervc ()

laissez essayer ci-dessous le code: xxx

Votre thesendervcobj aussi nul selon votre code.

Remarque: Utilisez des conventions de dénomination appropriées.


5 commentaires

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



-1
votes

parce que le thereceivervc1 code> était automatique DEINIT par arc code>. Vous devez enregistrer la référence de l'instance comme celle de celui-ci: xxx pré>

Assurez-vous également lorsque vous utilisez le délégué le définit comme faible var: p>

weak var delegate: theCommunicationsStructionProtocol?


2 commentaires

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.



1
votes

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é xxx

de thesendervc < p> Voici le nouveau délégué mis en place xxx

donc le xxx

sera modifié en < PRE> XXX

Étant donné qu'il inclut une propriété statique (déléguée)

d'autre part, le revenir doit être changé de: xxx

à: xxx

accéder au délégué de l'original Thesendervc ()


0 commentaires