Mon application dispose d'un contrôleur de vue principale dans lequel les informations d'un périphérique Bluetooth sont affichées. Pour me connecter au périphérique bluetooth, je passe à un contrôleur de vue différent pour me connecter au périphérique Bluetooth désiré. Je suis alors abonné à ce périphérique bluetooth qui appelle une fonction chaque fois que le périphérique bluetooth envoie des données. Après avoir sélectionné le périphérique auquel je souhaite me connecter, je passe à l'écran principal où je souhaite afficher les données que je reçois. Je peux voir que les événements de réception de paquets provenant du périphérique bluetooth fonctionnent toujours après le retour à l'écran principal avec des impressions dans le code du contrôleur secondaire.IOS Swift, délégué pour communiquer entre deux contrôleurs de vue
Mon problème est que je veux prendre ces données reçues dans mon deuxième contrôleur de vue et l'envoyer au contrôleur de vue principal chaque fois que je le reçois. Comme je ne peux pas utiliser les segments parce que je ne reviens pas sur le contrôleur secondaire, j'ai décidé d'utiliser le délégué pour communiquer.
Voici ce que j'ai ajouté à ce jour dans le deuxième contrôleur de vue, celui d'envoyer les données:
Dans contrôleur de vue secondaire, avant la classe:
protocol sendLatLonDelegate : class{
func sendReceiveData(data:AnyObject?)
}
Au sommet de mon point de vue secondaire classe de contrôleur avec mes autres variables
weak var delegate:sendLatLonDelegate?
Dans la fonction qui est appelée lorsque je reçois un paquet de mon appareil bluetooth
delegate?.sendReceiveData(latFloat)
Voici ce que j'ai ajouté dans mon principal contrôleur de vue, celui qui reçoit les données:
a ajouté à la définition de classe
class ViewController: UIViewController,sendLatLonDelegate {
Et dans ma classe ajouté
func sendReceiveData(data:AnyObject?) {
print("received data")
}
J'imprime la valeur des données reçues avant d'essayer de l'envoyer au contrôleur de la vue principale et je peux le voir correctement. Cependant, je ne vois pas mes données imprimées.
C'est probablement un petit lien que je ne réalise pas que je manque entre les deux mais je n'arrive pas à trouver ce que c'est. Quelqu'un a des suggestions? Merci beaucoup!
Edit: De recommandation dans les réponses, a ajouté
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!)
{
if (segue.identifier == "ConnectDeviceSegue")
{
let mapViewController = segue.destinationViewController as! ViewController
mapViewController.delegate = self
}
}
maintenant obtenir l'erreur Valeur de type 'ViewController' n'a pas membre 'délégué' à la ligne mapViewController.delegate = self
Eh bien, avez-vous défini le VC de réception en tant que délégué? – Losiowaty
@Losiowaty Votre deuxième contrôleur ne reçoit aucune valeur de délégué et passe à zéro. Vous devez envoyer un délégué du premier contrôleur au second contrôleur. –
@Losiowaty Je n'ai pas, donc je suppose que c'est probablement ce qui manque. Pourriez-vous me donner un exemple d'où et comment je devrais faire cela? En regardant brièvement, je pense que j'ai besoin d'obtenir une instance de la VC de réception dans mon VC d'envoi et de définir comme le délégué là-bas, mais je ne suis pas sûr de savoir comment s'y prendre. Merci! – lhbortho