如何在 watchOS 上基于分页的界面中的多个界面控制器之间共享变量

Posted

技术标签:

【中文标题】如何在 watchOS 上基于分页的界面中的多个界面控制器之间共享变量【英文标题】:How can I share variables between multiple interface controllers in a paged-based interface on watchOS 【发布时间】:2017-07-27 00:19:23 【问题描述】:

我有多个界面控制器,它们都以基于分页的格式同时打开。我需要在这些接口控制器之间共享信息。

对于我的用例,我不能强迫用户使用其他接口控制器之一(通过启动 segue),因此这些解决方案对我不起作用。我需要能够更改任一控制器中的一些变量,并在任一控制器中访问这些变量。

我尝试直接在界面控制器中设置一个当前不可见的变量:

InterfaceController2().variable = false

但是,这不起作用(如预期的那样),因为它没有访问该接口控制器的当前实例化实例。

我正在考虑某种全局变量情况,或者将首选项存储在 UserDefaults 中,但我觉得必须有更好的方法。

【问题讨论】:

使用单例。 ***.com/q/32660471/294884 【参考方案1】:

你可以使用单例。创建单例的最简单方法是将要在 InterfaceControllers 之间共享的变量设为类/静态属性。

你可以这样创建它:

class CommonClass 
    static var mySingleton = true

然后像这样从您的InterfaceControllers 访问它: CommonClass.mySingleton = false.

在使用单例时应该小心,因为它们可以从代码的任何位置访问,因此它们可能被误用为像全局变量一样,这可能有其缺陷。

查看this 文章了解有关单例的更多详细信息。

【讨论】:

【参考方案2】:

最佳选择:如果您的控制器有一个共同的父级,您可以使用委托方法从共同的父级传递/检索值。

Alt:您可以创建一个共享实例来存储您的值,并且您的控制器可以从那里更新/检索该值。

最后的选择:这有点恶心,但你可以使用 NSNotificationCenter。 (a) 在所有控制器中添加观察者,(b) 每当值更新时发布通知。然后 (c) 在通知处理程序中更新控制器中的本地值。

【讨论】:

再简单不过了,使用单例。 ios 工程中的几乎所有内容都是单例(尤其是从“应用程序”开始!) 我将使用单例(Alt 建议),但我可以看到这些其他方法在类似情况下会更好。

以上是关于如何在 watchOS 上基于分页的界面中的多个界面控制器之间共享变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WatchOS 的基于页面的界面中显示警报?

如何在启用分页的 UIScrollView 中延迟加载 100 多个页面?

21.6.2日志

android里实现一个tabhost显示怎么弄?

在codeigniter中在一页上进行多个分页的最佳方法

(C#)winform界面超过屏幕范围的数量,则使用上一页、下一页的分页模式怎样实现?