Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在嵌入UINavigationController的视图控制器之间传回数据_Ios_Objective C_Xcode_Delegates_Uinavigationcontroller - Fatal编程技术网

Ios 在嵌入UINavigationController的视图控制器之间传回数据

Ios 在嵌入UINavigationController的视图控制器之间传回数据,ios,objective-c,xcode,delegates,uinavigationcontroller,Ios,Objective C,Xcode,Delegates,Uinavigationcontroller,我将视图控制器嵌入具有一个属性(非原子强NSMutableArray*myData)的导航控制器中,当我推第二个视图时,我还使用以下方法将数组数据传递到此视图: -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"secondView"]) { SecondViewControlle

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

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

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

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

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

@property (nonatomic, copy) MyData *myData;

如果将指向数据的指针传递给另一个控制器,并且该指针更改了数据,则这两个控制器都会更改。在这种情况下,是的,但这取决于该属性的声明方式。如果我将第一个视图中的属性声明为弱而不是强,会有什么不同吗?如果它是弱属性,我将移动到第二个视图,我的数据对象是否会被释放?