2015-02-23 43 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