0
votes

Objective-C: Passez les données entre deux contrôleurs d'affichage non connectés

J'ai une vue de vue A avec un Uilabel et un mode de vue B avec une touche , donc je souhaite mettre à jour l'étiquette une fois que j'appuie sur le bouton. Je pourrais utiliser des délégués pour cela, mais mes conclusions de vue ne sont pas connectées et je ne peux pas utiliser quelque chose comme SetDelegate, je ne crée aucune instance d'une dans une autre. Donc, fondamentalement, ils sont créés ailleurs. Y a-t-il un moyen de le faire?


1 commentaires

Lorsque vous dites "non connecté", vous pouvez peut-être clarifier. Sont-ils dans la même manière de la hiérarchie du contrôleur, mais tout simplement ne correspond pas immédiat? Ou parlez-vous de certains échanges radicaux du contrôleur de vue root de la fenêtre? La façon dont vous avez formulé la question, vous allez presque certainement obtenir des réponses sur les globaux, les singletons, etc. mais une injection de dépendance est souvent préférée. Mais nous avons besoin d'un peu plus de contexte pour vous conseiller.


3 Réponses :


0
votes

variante 1: si la contrôleur et le contrôleur gibe-temps diffère

Utiliser nsuserdefault . Sur le bouton Controllerb, cliquez sur Stocker les données dans NSUseraFault, dans Controllera Lire les données de NsUserDefault et Show in Cadel (Nsuserdefault est également observable, afin de suivre les modifications de l'heure d'exécution)

variante 2: si contrôleur et contrôleurb à la fois en temps d'exécution

Utiliser nsnotificationCenter . Sur le bouton Controllerb, cliquez sur Publier une NSnotification avec des données à UserInfo et la contrôleur dans le gestionnaire de notification extrait des données de UserInfo et d'attribuer à l'étiquette.


0 commentaires

0
votes

Utiliser le modèle de coordinateur.

classe qui créera / obtenir les 2 instances des deux VCS, Et avec des délégués déplacera les données entre eux. L'avantage du modèle de coordinateur est que votre VCS peut être réutilisé sur d'autres endroits (même ou autre projet), ainsi que le code est plus propre.


0 commentaires

0
votes

Pour développer la réponse de APSERI:

Méthode de notification de modification du contrôleur d'affichage: Dans le contrôleur d'affichage avec le bouton sur le bouton Appuyez sur Call: P>

    self.label.text=[[NSUserDefaults standardUserDefaults] 
     stringForKey:@"myuniquekeyname"];


0 commentaires