0

我将视图控制器嵌入到具有一个属性(非原子强 NSMutableArray *myData)的导航控制器中,当我推送第二个视图时,我还使用此方法将数组数据传递给该视图:

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {  
      if ([[segue identifier] isEqualToString:@"secondView"]) {
          SecondViewController *svc = [segue destinationViewController];
          svc.myDataInSecondView = self.myData;
     }

我的问题是:为什么如果我更改 myDataInSecondView 数组中的任何值,然后我会回到第一次查看 myData 数组中的值也更改了?我一直认为我必须使用自定义协议和委托将任何数据传递回之前的视图。

4

1 回答 1

1

您这样做的方式是在视图控制器之间共享数据的一种非常常见的方式。第二个视图控制器具有可以由第一个视图控制器设置的属性。该属性是一个指针,与第一个视图控制器中的相同。两者都指向内存中的同一位置,因此任何一个视图控制器都可以更改相同的数据。

如果您不希望第二个视图控制器更改数据,请将属性设置为copy.

@property (nonatomic, copy) MyData *myData;
于 2013-03-13T21:31:44.970 回答