0

我的问题更多的是“可以吗”而不是“如何做到这一点”。我有一个基于 navigationViewController 的简单应用程序。我有一个 viewControllerA 正在将另一个 viewControllerB 推入堆栈。我所做的是 - 在 vi​​ewControllerB 中我有一个 viewControllerA 类型的指针,所以当我将它推入堆栈时,我会说这样的话:

-(void)buttonPressed{
  ViewControllerB * nextView = [ViewControllerB alloc] init];
  nextView.lastView = self;
  [self.navigationViewController pushViewController:nextView animated:YES]; 
}

然后,在新的 viewControler 中,我为第一个 viewControler 中的字段赋值:

lastView.dataString = @"ABC";

因此,当 viewControllerA 关闭时,我更改了 viewControllerA 中字段的值。

我的问题是:这样好吗?如果不是,你能告诉我为什么这不是一个好主意吗?我正在使用 NSString 值。

多谢你们 :)

4

2 回答 2

0

确保 ViewControllerB 没有保留它的lastview属性,否则这将是一个保留周期,两个视图控制器将永远不会被释放。将信息从子视图控制器传递给父视图的正确方法是使用协议。有很多类似的问题,例如参见https://stackoverflow.com/a/9736559/568529

于 2013-02-28T19:36:58.427 回答
0

从技术上讲,这没问题,它会起作用。如前所述,确保您只持有对前一个视图控制器的弱引用,否则会导致保留周期。

然而,就可重用性和功能隔离而言,这并不是真正干净的。

您可以使用的其他三种方法:

  • 代表团
  • 键值观察
  • NS通知
于 2013-02-28T19:56:19.120 回答