gpt4 book ai didi

ios - 如何不断地将数据从父 ViewController 发送到 Container View Controller

转载 作者:行者123 更新时间:2023-11-28 14:08:22 25 4
gpt4 key购买 nike

在我的应用程序中,主 ViewController 每秒从传感器获取数据 60 次。为了显示数据,我有两个 ContainerView,一个显示原始数据,另一个显示在图表中。

enter image description here

我如何不断地将数据从我的 mainVC 发送到 ContainerView 或让 ContiainerViews 访问我的 mainVC 中的变量?

最佳答案

有很多方法可以对此进行切片。

我建议不要在 View Controller 中收集来自传感器的数据。这不是真正的 View Controller 的工作。当有多个对象需要该传感器数据时,情况会变得更糟。

可能最简洁的设计是创建一个单独的对象(我将其称为 SensorManager)来收集您的传感器数据并将其传递给任何关心的人。

您可以让 SensorManager 使用 NotificationCenter 广播通知,然后让所有感兴趣的对象为他们关心的通知添加观察者。这使您在 SensorManager 和接收传感器数据通知的对象之间建立了非常松散的耦合。缺点是代码更难调试。

或者,可以将您的 SensorManager 设置为具有它通知的对象数组。我将定义一个协议(protocol),该协议(protocol)具有一个或多个使用传感器数据调用的方法,并让 SensorManager 维护一组符合该协议(protocol)的客户端对象。当 SensorManager 有新的传感器数据时,它将遍历客户端对象数组并在每个对象上调用适当的方法以告知每个对象有关新数据的信息。第二个选项有点像委托(delegate)设计模式,但它是一对多的,其中委托(delegate)模式是一对一的信息传递。

如果您执着于在主视图 Controller 中收集传感器数据的想法,并且使用嵌入转场创建 subview Controller ,那么您可以在主视图中编写一个 prepareForSegue() 方法寻找符合协议(protocol)的目标 View Controller 的 Controller 。我们称它为 SensorDataListener。主视图 Controller 可以将这些对象保存在数组中,并使用协议(protocol)中的方法通知对象有关新传感器数据的信息。 (最后一种方法类似于创建 SensorManager 对象的方法,但它是充当该角色的主视图 Controller 。)

//At the top of your class:

protocol SensorDataListener {
func newSensorData(_ SensorData)
}

var sensorClients = [SensorDataListener]()

//...

func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let dest = segue.desination as SensorDataListener {
sensorClients.append(dest)
}
}

然后当您收到新数据时

sensorClients.forEach { sensorClient in
sensorClient.newSensorData(sensorData)
}

关于ios - 如何不断地将数据从父 ViewController 发送到 Container View Controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52797880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com