Cela dépend de l'endroit où le code dans lequel vous souhaitez définir string1 est en cours d'exécution. Si c'est dans une classe extérieure avec accès aux deux objets contrôleur de vue, c'est simple. Si vous avez l'objet ViewController1 VC1 et VC2 objet ViewController2, tout ce que vous faites est:
[vc1 setString1:[vc2 string2]];
Si vous souhaitez définir chaine1 à partir du code exécuté dans ViewController2, vous utilisez le mécanisme de notification.Dans la routine d'initialisation de ViewController1, vous mettez:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(aChangeStringMethod:) name:@"anyStringJustMakeItUnique" object:nil];
Et définir:
-(void)aChangeStringMethod:(NSNotification)notification{
string1 = [((ViewController2 *)[notification object]) string2];
}
Puis, en ViewController2, lorsque vous voulez changer la chaîne:
[[NSNotificationCenter defaultCenter] postNotificationName:@"anyStringJustMakeItUnique" withObject:self];
La même technique est utilisée lorsque vous changez la chaîne d'une troisième classe qui a accès à vc2 mais pas à vc1. Code ViewController1 est le même que ci-dessus, et quand vous voulez changer la chaîne:
[[NSNotificationCenter defaultCenter] postNotificationName:@"anyStringJustMakeItUnique" withObject:vc2];
La partie la plus délicate est que si vous voulez changer la chaîne à partir de ViewController1 (en supposant que vous n'avez pas accès à l'objet vc2). Vous devez utiliser deux notifications: celui ci-dessus, et aussi, pour ViewController2:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(launchTheOtherNotificationMethod:) name:@"anotherNotificationName" object:nil];
-(void)launchTheOtherNotificationMethod:(NSNotification)notification{
[[NSNotificationCenter defaultCenter] postNotificationName:@"anyStringJustMakeItUnique" withObject:self];
}
Ensuite, lorsque vous voulez changer la chaîne:
[[NSNotificationCenter defaultCenter] postNotificationName:@"anotherNotificationName" withObject:nil];
Si vous pensez que cela est trop complexe ou les causes trop de frais généraux, la solution la plus simple est d'avoir, comme les champs dans ViewController1 et ViewController2, des pointeurs les uns aux autres. Puis, dans ViewController1:
string1 = [myVC2 string2];
Et si vous faites ces propriétés des champs, puis, de l'extérieur:
[vc1 setString1:[[vc1 myVC2] string2]];
Et même:
[[vc2 myVC1] setString1:[vc2 string2]];