使用 performSegueWithIdentifier 获取 DestinationViewController 的功能,但不显示它

use performSegueWithIdentifier to get functionality of DestinationViewController, but not show it up

我有一个 WatchKit 应用程序,它使用来自 NSUserDefaults 的数据更新一些标签。这些 defaults 由 iOS 应用程序中的两个不同 ViewControllers 更新。 如果我按下 ViewController1 中的一个按钮,iOS 应用程序中的视图以及 WatchKit 应用程序中的视图都会更新(使用 NSTimer 每秒更新一次)。到目前为止一切顺利,但现在我需要一个 defaults 值显示在仅由 iOS 应用程序 ViewController2 更新的手表上。我想留在 ViewController1 的视图上,但是当我按下按钮时,它应该是 ViewController2 中的 'run all the stuff' (特别是在更新特定的 NSUserDefault 值之后所有控制器数学都已完成)但没有移动到它。

我在ViewController1按钮的@IBAction功能中尝试了ViewController2().viewDidLoad(),但是这会导致崩溃。还尝试使用像 here 这样的委托,然后从隐藏标签中获取我的值,但无法使其工作。

当我简单地移动到 ViewController2self.performSegueWithIdentifier("moveToView2", sender: self) 时一切正常(手表上的所有标签都已更新),但我不想移动到 View2,我想留在 View1当按下按钮但首先从 View2 更新 NSUserDefaults...

您正在与糟糕的设计决策作斗争。

您需要重新考虑您的设计。如果您的功能绑定到您在其他地方需要的视图控制器,则需要将该功能拉出到非视图控制器中 class 并调用它。

我经常创建一个我使用的 Utils class。如果这些方法不需要状态数据,我会让它们成为 class 方法。如果他们需要持久状态数据,我将 utils class 设为单例。

然后我在单例中调用我需要的方法。