【问题标题】:Passing data back between View Controllers embed in UINavigationController在嵌入 UINavigationController 的视图控制器之间传回数据
【发布时间】:2013-03-13 21:17:40
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您将指向数据的指针传递给另一个控制器并且更改了数据,那么它会同时更改。
  • 在这种情况下是的,但这取决于该属性是如何声明的
  • 如果我将第一个视图中的属性声明为弱而不是强,这会有所不同吗?如果它是弱属性并且我将移至第二个视图,myData 对象会被释放吗?

标签: ios objective-c xcode delegates uinavigationcontroller


【解决方案1】:

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

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

@property (nonatomic, copy) MyData *myData;

【讨论】:

    猜你喜欢
    • 2014-10-05
    • 2016-08-22
    • 2011-07-09
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多