【问题标题】:BOOL property on UIViewController changes on its ownUIViewController 上的 BOOL 属性会自行更改
【发布时间】:2013-02-15 05:48:19
【问题描述】:

在 viewController A 上,我在其上设置了一个 BOOL 属性 WantAsk(非原子,分配),我通过 self.wantsAsk 访问该属性。当我转到另一个视图控制器(vcB)时,我设置了它的 wantAsk 与 vcA 相同。到了返回A的时候,调用vcB的prepareToSegue方法 我从序列(segue.destinationViewController)中获得了一个指向vcA的指针;但它显示 vcA 的值都是错误的。特别是,wantsAsk 应该(并且曾经是)YES 现在是 NO。

我尝试在 WantAsk 上设置 watchPoint,但它从未被触发。我一直在使用这种通用设备,想知道为什么它会在这里失败。

【问题讨论】:

  • 你能发布一些代码吗?
  • 我怀疑你每次展示时都会重新实例化视图控制器。

标签: ios uiviewcontroller segue


【解决方案1】:

如果您要继续使用视图控制器 A,您很可能会重新实例化它。所以新的 A 视图控制器与原来的 A 视图控制器不同。

相反,只需跳过从 B 到 A 的 segue 准备。如果您使用导航控制器,请让它负责返回到 A。如果 B 是模态的,只需调用 dismissViewController

【讨论】:

    【解决方案2】:

    如果您只对您的属性使用 setter 方法(即您不使用 _wantsAsk = 或任何您合成的 var),您可以通过使用符号断点确定它在哪里设置。转到断点窗口并单击符号断点或使用默认的 Xcode 快捷方式按 cmd+opt+\ 从那里添加“setWantsAsk:”(不带引号)。运行程序并检查它停止的地方。

    【讨论】:

    • 正如 H2CO3 所拥有的那样,我正在重新实例化视图控制器。显然,这就是 segue 所做的。这就是为什么 BOOL 为 NO - 只是 BOOL 的默认值。如果我想正确读取值,我需要使用委托。感谢两位的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    相关资源
    最近更新 更多