这取决于您要设置string1的代码在哪里运行。如果它是在具有访问两个视图控制器对象的外部类中,则很简单。如果您有ViewController1对象vc1和ViewController2对象vc2,则只需执行以下操作:
[vc1 setString1:[vc2 string2]];
如果您想要在ViewController2内的代码运行中设置string1,则可以使用通知机制。在ViewController1的初始化过程中,您需要添加以下代码:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(aChangeStringMethod:) name:@"anyStringJustMakeItUnique" object:nil]
并定义:
-(void)aChangeStringMethod:(NSNotification)notification{
string1 = [((ViewController2 *)[notification object]) string2];
}
接下来,在ViewController2中,当你想要改变字符串时:
[[NSNotificationCenter defaultCenter] postNotificationName:@"anyStringJustMakeItUnique" withObject:self]
当您从某个具有访问vc2但不具有访问vc1的第三类更改字符串时,将使用相同的技术。 ViewController1代码与上面相同,当您想要更改字符串时:
[[NSNotificationCenter defaultCenter] postNotificationName:@"anyStringJustMakeItUnique" withObject:vc2]
最棘手的部分是,如果你想从ViewController1中更改字符串(假设你没有访问vc2对象),则必须使用两个通知:上面提到的那个,以及针对ViewController2:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(launchTheOtherNotificationMethod:) name:@"anotherNotificationName" object:nil];
-(void)launchTheOtherNotificationMethod:(NSNotification)notification{
[[NSNotificationCenter defaultCenter] postNotificationName:@"anyStringJustMakeItUnique" withObject:self];
}
然后,当您想要更改字符串时:
[[NSNotificationCenter defaultCenter] postNotificationName:@"anotherNotificationName" withObject:nil]
如果你认为这太过复杂或者会带来过多的开销,更简单的解决方案是在ViewController1和ViewController2中作为字段拥有彼此的指针。然后,在ViewController1中:
string1 = [myVC2 string2];
如果你将这些字段定义为属性,那么外部使用时:
[vc1 setString1:[[vc1 myVC2] string2]];
甚至还有:
[[vc2 myVC1] setString1:[vc2 string2]];