2010-04-11 5 views

Répondre

0

J'utiliserais le délégué d'application. Ou, si une vue possède l'autre, vous pouvez les initialiser ensemble et conserver la référence principale dans la classe.

Je trouve toujours utile d'avoir un objet Context global pour conserver les informations globales parmi les vues. Ces informations peuvent être des informations de configuration, l'orientation actuelle du périphérique, des gestionnaires de base de données, etc.

Pour les variables dont vous avez besoin d'un accès croisé, vous pouvez utiliser Propriétés.

class VC1 : UIViewController { 
    NSString* v1; 
    NSString* v2; 
} 

@property (copy) NSString *v1; 
@property (copy) NSString *v2; 

Et puis, dans l'autre vue:

class VC2 : UIViewController { 
    VC1 *vc1; 
} 

Et vous implémentations de messages dans VC2 vous pouvez utiliser v1 et v2 VC1 comme ceci:

- (void) someMessage { 
    NSLog(@"VC1's v1 value is %@ and v2 value is %@", [vc1 v1], [vc1 v2]); 
} 

Hope it helps.

+0

Où sont mes variables et comment une vue est-elle connue des variables de l'autre? – Moshe

+0

Mis à jour ma réponse avec du code. J'espère que cela aide. –

+0

Cela semble bon, mais comment puis-je obtenir la valeur de VC1 dans VC2? Chaque contrôleur de vue verra-t-il l'autre via le délégué maintenant? – Moshe

1

Si vous souhaitez renvoyer des informations, vous pouvez utiliser target-action (comme le fait UIControl), ou vous pouvez envoyer NSNotifications ou utiliser un protocole de délégué générique. À moins que ce ne soit une information d'utilisation dans votre application, la mettre dans votre application peut être exagérée.

+0

Je dirais que bien que ce soit un moyen rapide et sale de transmettre des données entre les vues, ce n'est pas une bonne pratique. Il associe les contrôleurs de vue et rend l'application difficile à maintenir et à mettre à l'échelle. – TechZen

+0

Très explicitement, il ne couple rien ensemble. Où est le couplage? –

+0

+1 pour NSNotifications et délégués – Anurag

Questions connexes