2015-02-23 44 views
0

我被困在一些简单的&同时对我而言很复杂。Swift - 没有初始化控制器的呼叫功能

我创建使用斯威夫特与SocketRocket和WebSockets的工作的一个应用程序,一旦一个简单的视图控制器(class myVC)被加载,viewDidLoad()内我调用一个函数,将消息发送到服务器并获得响应回来。所有这些工作正常。

我分析在另一个类(class dataParsing)的响应,然后想调用从视图控制器的功能是仍然在顶部,使用功能显示了答案:presentData(data)

如果我使用:myVC().presentData(data)整个视图控制器重新加载并且当视图控制器被重新初始化并且我们进入无限循环时发送消息...

什么是解决方案?

非常感谢!

回答

1

为了调用视图控制器的一个方法(更一般地是一个类/结构的实例),您需要该实例 - 创建一个新实例,就像您使用myCV().presentData(data)创建一个与该实例没有关系的新实例发起请求的人。

一种可能的方法是将视图控制器实例传递给你的数据解析类 - 然后简单地调用该实例上的目标方法。

一个更好的方法是将闭包传递给数据解析器,该解析器只需调用presentData()方法 - 然后闭包由数据解析器执行。

另一种解决方案可能是使用通知:定义某个事件,使视图控制器监听该事件,并让数据解析器在符合正确条件时触发它。

最后,也许是最简单的一个,但我不知道有多少可行 - 取决于视图控制器和数据解析器之间的交互方式。我假定在网络操作结束时,您创建并调用数据解析器的一个方法,该方法是同步执行的。如果这是正确的,而不是从数据解析器调用视图控制器方法,则只需在数据解析器方法返回后直接从视图控制器调用它即可。

+0

谢谢@Antonio!我似乎无法找到一种方法来传递VC实例,因此我将使用通知中心处理通知,或者如您所说,另一种方法是更改​​“路径”,一旦接收到消息以开始来自VC的过程。非常有用的建议! – Kostas 2015-02-23 23:38:41