我有一个视图控制器嵌入导航控制器中有一个属性(非原子强NSMutableArray * myData),当我按下第二个视图时,我也使用这个方法将我的数组数据传递给这个视图:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"secondView"]) {
SecondViewController *svc = [segue destinationViewController];
svc.myDataInSecondView = self.myData;
}
我的问题是:为什么我更改myDataInSecondView数组中的任何值而不是我将回到第一个视图myData数组中的值也会更改?我一直认为我必须使用自定义协议和委托将任何数据传回上一个视图。
答案 0 :(得分:1)
您执行此操作的方式是在视图控制器之间共享数据的一种非常常见的方式。第二视图控制器具有可由第一视图控制器设置的属性。该属性是一个指针,与第一个视图控制器中的相同。两者都指向内存中的相同位置,因此任一视图控制器都可以更改相同的数据。
如果您不希望第二个视图控制器更改数据,请将该属性设置为copy
。
@property (nonatomic, copy) MyData *myData;